浏览代码

Merge branch 'master' into metal-ios

/fptl_cleanup
Antti Tapaninen 8 年前
当前提交
0df1b41e
共有 102 个文件被更改,包括 14301 次插入11 次删除
  1. 52
      Assets/ScriptableRenderPipeline/Editor/MaterialUpgrader.cs
  2. 2
      Assets/ScriptableRenderPipeline/HDRenderPipeline/Lighting/TilePass/TilePass.cs
  3. 7
      Assets/ScriptableRenderPipeline/HDRenderPipeline/Sky/SkyManager.cs
  4. 40
      Assets/TestScenes/HDTest/LayeredLitTest/Textures/Detail_Checker.tga.meta
  5. 2
      ProjectSettings/QualitySettings.asset
  6. 9
      Assets/LowEndMobilePipeline.meta
  7. 9
      Assets/Plugins.meta
  8. 9
      Assets/LowEndMobilePipeline/LowEndMobilePipelineAsset.asset.meta
  9. 145
      Assets/LowEndMobilePipeline/LowEndMobilePipelineAsset.cs
  10. 12
      Assets/LowEndMobilePipeline/LowEndMobilePipelineAsset.cs.meta
  11. 9
      Assets/LowEndMobilePipeline/TestScenes.meta
  12. 9
      Assets/LowEndMobilePipeline/Editor.meta
  13. 12
      Assets/LowEndMobilePipeline/LowEndMobilePipeline.cs.meta
  14. 1001
      Assets/LowEndMobilePipeline/TestScenes/LDRenderPipelineVikingVillage/LightingData.asset
  15. 8
      Assets/LowEndMobilePipeline/TestScenes/LDRenderPipelineVikingVillage/LightingData.asset.meta
  16. 1001
      Assets/LowEndMobilePipeline/TestScenes/LDRenderPipelineVikingVillage/Lightmap-0_comp_light.exr
  17. 68
      Assets/LowEndMobilePipeline/TestScenes/LDRenderPipelineVikingVillage/Lightmap-0_comp_light.exr.meta
  18. 1001
      Assets/LowEndMobilePipeline/TestScenes/LDRenderPipelineVikingVillage/ReflectionProbe-0.exr
  19. 69
      Assets/LowEndMobilePipeline/TestScenes/LDRenderPipelineVikingVillage/ReflectionProbe-0.exr.meta
  20. 1001
      Assets/LowEndMobilePipeline/TestScenes/Textures/154.JPG
  21. 1001
      Assets/LowEndMobilePipeline/TestScenes/Textures/154_norm.JPG
  22. 108
      Assets/LowEndMobilePipeline/TestScenes/Textures/154_norm.JPG.meta
  23. 1001
      Assets/LowEndMobilePipeline/TestScenes/Textures/168.JPG
  24. 1001
      Assets/LowEndMobilePipeline/TestScenes/Textures/168_norm.JPG
  25. 108
      Assets/LowEndMobilePipeline/TestScenes/Textures/168_norm.JPG.meta
  26. 108
      Assets/LowEndMobilePipeline/TestScenes/Textures/154.JPG.meta
  27. 108
      Assets/LowEndMobilePipeline/TestScenes/Textures/168.JPG.meta
  28. 9
      Assets/LowEndMobilePipeline/TestScenes/LDRenderPipelineBasicScene.meta
  29. 8
      Assets/LowEndMobilePipeline/TestScenes/LDRenderPipelineBasicScene.unity.meta
  30. 9
      Assets/LowEndMobilePipeline/TestScenes/LDRenderPipelineVikingVillage.meta
  31. 8
      Assets/LowEndMobilePipeline/TestScenes/LDRenderPipelineVikingVillage.unity.meta
  32. 9
      Assets/LowEndMobilePipeline/TestScenes/Materials.meta
  33. 9
      Assets/LowEndMobilePipeline/TestScenes/Textures.meta
  34. 1001
      Assets/LowEndMobilePipeline/TestScenes/LDRenderPipelineBasicScene.unity
  35. 8
      Assets/LowEndMobilePipeline/TestScenes/LDRenderPipelineBasicScene/LightingData.asset
  36. 9
      Assets/LowEndMobilePipeline/TestScenes/LDRenderPipelineBasicScene/LightingData.asset.meta
  37. 1001
      Assets/LowEndMobilePipeline/TestScenes/LDRenderPipelineBasicScene/Lightmap-0_comp_light.exr
  38. 72
      Assets/LowEndMobilePipeline/TestScenes/LDRenderPipelineBasicScene/Lightmap-0_comp_light.exr.meta
  39. 198
      Assets/LowEndMobilePipeline/TestScenes/LDRenderPipelineBasicScene/ReflectionProbe-0.exr
  40. 73
      Assets/LowEndMobilePipeline/TestScenes/LDRenderPipelineBasicScene/ReflectionProbe-0.exr.meta
  41. 1001
      Assets/LowEndMobilePipeline/TestScenes/LDRenderPipelineVikingVillage.unity
  42. 9
      Assets/LowEndMobilePipeline/TestScenes/Materials/LDRenderPipeMaterials.meta
  43. 9
      Assets/LowEndMobilePipeline/TestScenes/Materials/LegacyMobileMaterials.meta
  44. 77
      Assets/LowEndMobilePipeline/TestScenes/Materials/LegacyMobileMaterials/LegacyMobileAlpha.mat
  45. 9
      Assets/LowEndMobilePipeline/TestScenes/Materials/LegacyMobileMaterials/LegacyMobileAlpha.mat.meta
  46. 81
      Assets/LowEndMobilePipeline/TestScenes/Materials/LegacyMobileMaterials/LegacyMobileColors.mat
  47. 9
      Assets/LowEndMobilePipeline/TestScenes/Materials/LegacyMobileMaterials/LegacyMobileColors.mat.meta
  48. 81
      Assets/LowEndMobilePipeline/TestScenes/Materials/LegacyMobileMaterials/LegacyMobileGlass.mat
  49. 9
      Assets/LowEndMobilePipeline/TestScenes/Materials/LegacyMobileMaterials/LegacyMobileGlass.mat.meta
  50. 9
      Assets/LowEndMobilePipeline/TestScenes/Materials/LegacyMobileMaterials/LegacyMobilePlane.mat.meta
  51. 81
      Assets/LowEndMobilePipeline/TestScenes/Materials/LegacyMobileMaterials/LegacyMobileSphere.mat
  52. 9
      Assets/LowEndMobilePipeline/TestScenes/Materials/LegacyMobileMaterials/LegacyMobileSphere.mat.meta
  53. 84
      Assets/LowEndMobilePipeline/TestScenes/Materials/LegacyMobileMaterials/LegacyMobilePlane.mat
  54. 9
      Assets/LowEndMobilePipeline/TestScenes/Materials/LDRenderPipeMaterials/LDSpecularSphere0.mat.meta
  55. 8
      Assets/LowEndMobilePipeline/TestScenes/Materials/LDRenderPipeMaterials/MobileColors.mat.meta
  56. 8
      Assets/LowEndMobilePipeline/TestScenes/Materials/LDRenderPipeMaterials/MobileColorsTile.mat.meta
  57. 85
      Assets/LowEndMobilePipeline/TestScenes/Materials/LDRenderPipeMaterials/MobileGlass.mat
  58. 8
      Assets/LowEndMobilePipeline/TestScenes/Materials/LDRenderPipeMaterials/MobileGlass.mat.meta
  59. 8
      Assets/LowEndMobilePipeline/TestScenes/Materials/LDRenderPipeMaterials/MobilePlane.mat.meta
  60. 83
      Assets/LowEndMobilePipeline/TestScenes/Materials/LDRenderPipeMaterials/LDSpecularSphere0.mat
  61. 83
      Assets/LowEndMobilePipeline/TestScenes/Materials/LDRenderPipeMaterials/MobileColors.mat
  62. 83
      Assets/LowEndMobilePipeline/TestScenes/Materials/LDRenderPipeMaterials/MobilePlane.mat
  63. 83
      Assets/LowEndMobilePipeline/TestScenes/Materials/LDRenderPipeMaterials/MobileColorsTile.mat
  64. 9
      Assets/LowEndMobilePipeline/Shaders.meta
  65. 67
      Assets/LowEndMobilePipeline/Shaders/LowEndParticlesAdd.shader
  66. 9
      Assets/LowEndMobilePipeline/Shaders/LowEndParticlesAdd.shader.meta
  67. 68
      Assets/LowEndMobilePipeline/Shaders/LowEndParticlesMultiply.shader
  68. 9
      Assets/LowEndMobilePipeline/Shaders/LowEndParticlesMultiply.shader.meta
  69. 9
      Assets/LowEndMobilePipeline/Shaders/LowEndMobilePipeline.shader.meta
  70. 229
      Assets/LowEndMobilePipeline/Shaders/LowEndMobilePipelineCore.cginc
  71. 9
      Assets/LowEndMobilePipeline/Shaders/LowEndMobilePipelineCore.cginc.meta
  72. 282
      Assets/LowEndMobilePipeline/Shaders/LowEndMobilePipeline.shader
  73. 113
      Assets/LowEndMobilePipeline/Editor/LowendPipelineAssetInspector.cs
  74. 12
      Assets/LowEndMobilePipeline/Editor/LowendPipelineAssetInspector.cs.meta
  75. 12
      Assets/LowEndMobilePipeline/Editor/LowendMobilePipelineMaterialEditor.cs.meta
  76. 12
      Assets/LowEndMobilePipeline/Editor/StandardToLowEndMaterialUpgrader.cs.meta
  77. 32
      Assets/LowEndMobilePipeline/Editor/StandardToLowEndMaterialUpgrader.cs
  78. 12
      Assets/LowEndMobilePipeline/Editor/LegacyShadersToLowEndUpgrader.cs.meta
  79. 12
      Assets/LowEndMobilePipeline/Editor/LowendUpgraders.cs.meta
  80. 85
      Assets/LowEndMobilePipeline/Editor/LegacyShadersToLowEndUpgrader.cs
  81. 282
      Assets/LowEndMobilePipeline/Editor/LowendMobilePipelineMaterialEditor.cs
  82. 37
      Assets/LowEndMobilePipeline/Editor/UpgradeCommon.cs
  83. 12
      Assets/LowEndMobilePipeline/Editor/UpgradeCommon.cs.meta
  84. 253
      Assets/LowEndMobilePipeline/Editor/LowendUpgraders.cs
  85. 472
      Assets/LowEndMobilePipeline/LowEndMobilePipeline.cs
  86. 25
      Assets/LowEndMobilePipeline/LowEndMobilePipelineAsset.asset
  87. 9
      Assets/Plugins/Android.meta

52
Assets/ScriptableRenderPipeline/Editor/MaterialUpgrader.cs


Dictionary<string, string> m_FloatRename = new Dictionary<string, string>();
Dictionary<string, string> m_ColorRename = new Dictionary<string, string>();
Dictionary<string, float> m_FloatPropertiesToSet = new Dictionary<string, float>();
Dictionary<string, Color> m_ColorPropertiesToSet = new Dictionary<string, Color>();
List<string> m_TexturesToRemove = new List<string>();
class KeywordFloatRename
{
public string keyword;

None = 0,
LogErrorOnNonExistingProperty = 1,
CleanupNonUpgradedProperties = 2,
LogMessageWhenNoUpgraderFound = 4
}
public void Upgrade(Material material, UpgradeFlags flags)

foreach (var t in m_ColorRename)
dstMaterial.SetColor(t.Value, srcMaterial.GetColor(t.Key));
foreach (var prop in m_TexturesToRemove)
dstMaterial.SetTexture(prop, null);
foreach (var prop in m_FloatPropertiesToSet)
dstMaterial.SetFloat(prop.Key, prop.Value);
foreach (var prop in m_ColorPropertiesToSet)
dstMaterial.SetColor(prop.Key, prop.Value);
public void RenameShader(string oldName, string newName, MaterialFinalizer finalizer)
public void RenameShader(string oldName, string newName, MaterialFinalizer finalizer = null)
{
m_OldShader = oldName;
m_NewShader = newName;

m_ColorRename[oldName] = newName;
}
public void RemoveTexture(string name)
{
m_TexturesToRemove.Add(name);
}
public void SetFloat(string propertyName, float value)
{
m_FloatPropertiesToSet[propertyName] = value;
}
public void SetColor(string propertyName, Color value)
{
m_ColorPropertiesToSet[propertyName] = value;
}
public void RenameKeywordToFloat(string oldName, string newName, float setVal, float unsetVal)
{
m_KeywordFloatRename.Add(new KeywordFloatRename { keyword = oldName, property = newName, setVal = setVal, unsetVal = unsetVal });

AssetDatabase.Refresh();
}
public static void UpgradeProjectFolder(List<MaterialUpgrader> upgraders, string progressBarName)
public static void UpgradeProjectFolder(List<MaterialUpgrader> upgraders, string progressBarName, UpgradeFlags flags = UpgradeFlags.None)
if (!EditorUtility.DisplayDialog("Material Upgrader", "The upgrade will overwrite material settings in your project." +
"Be sure to have a project backup before proceeding", "Proceed", "Cancel"))
return;
int totalMaterialCount = 0;
foreach (string s in UnityEditor.AssetDatabase.GetAllAssetPaths())
{

break;
Material m = UnityEditor.AssetDatabase.LoadMainAssetAtPath(path) as Material;
Upgrade(m, upgraders, UpgradeFlags.None);
Upgrade(m, upgraders, flags);
//SaveAssetsAndFreeMemory();
}

public static void Upgrade(Material material, List<MaterialUpgrader> upgraders, UpgradeFlags flags)
{
var upgrader = GetUpgrader(upgraders, material);
else if ((flags & UpgradeFlags.LogMessageWhenNoUpgraderFound) == UpgradeFlags.LogMessageWhenNoUpgraderFound)
Debug.Log(string.Format("There's no upgrader to convert {0} shader to selected pipeline", material.shader.name));
public static void UpgradeSelection(List<MaterialUpgrader> upgraders, string progressBarName)
public static void UpgradeSelection(List<MaterialUpgrader> upgraders, string progressBarName, UpgradeFlags flags = UpgradeFlags.None)
var selection = Selection.objects;
if (!EditorUtility.DisplayDialog("Material Upgrader", string.Format("The upgrade will possibly overwrite all the {0} selected material settings", selection.Length) +
"Be sure to have a project backup before proceeding", "Proceed", "Cancel"))
return;
var selection = Selection.objects;
for (int i = 0; i < selection.Length; i++)
{

var material = selection[i] as Material;
Upgrade(material, upgraders, UpgradeFlags.None);
Upgrade(material, upgraders, flags);
if (material != null)
lastMaterialName = material.name;
}

2
Assets/ScriptableRenderPipeline/HDRenderPipeline/Lighting/TilePass/TilePass.cs


// Setup shadow data arrays
// In case lightData.shadowDimmer == 0.0 we need to avoid rendering the shadow map... see how it can be done with the culling (and more specifically, how can we do that BEFORE sending for shadows)
bool hasShadows = lightData.shadowDimmer > 0.0f && light.light.shadows != LightShadows.None && shadowOutput.GetShadowSliceCountLightIndex(lightIndex) != 0;
bool hasShadows = lightData.shadowDimmer > 0.0f && distanceToCamera < shadowSettings.maxShadowDistance && light.light.shadows != LightShadows.None && shadowOutput.GetShadowSliceCountLightIndex(lightIndex) != 0;
bool hasNotReachMaxLimit = shadowCount + (lightData.lightType == GPULightType.Point ? 6 : 1) <= k_MaxShadowOnScreen;
// TODO: Read the comment about shadow limit/management at the beginning of this loop

7
Assets/ScriptableRenderPipeline/HDRenderPipeline/Sky/SkyManager.cs


Utilities.Destroy(m_SkyboxMarginalRowCdfRT);
Utilities.Destroy(m_SkyboxConditionalCdfRT);
m_UpdateRequired = true; // Special case. Even if update mode is set to OnDemand, we need to regenerate the environment after destroying the texture.
m_SkyboxCubemapRT = null;
m_SkyboxGGXCubemapRT = null;
m_SkyboxMarginalRowCdfRT = null;
m_SkyboxConditionalCdfRT = null;
}
if (m_SkyboxCubemapRT == null)

m_SkyboxConditionalCdfRT.filterMode = FilterMode.Point;
m_SkyboxConditionalCdfRT.Create();
}
m_UpdateRequired = true; // Special case. Even if update mode is set to OnDemand, we need to regenerate the environment after destroying the texture.
}
m_CubemapScreenSize = new Vector4((float)resolution, (float)resolution, 1.0f / (float)resolution, 1.0f / (float)resolution);

40
Assets/TestScenes/HDTest/LayeredLitTest/Textures/Detail_Checker.tga.meta


mipmaps:
mipMapMode: 0
enableMipMap: 1
sRGBTexture: 1
sRGBTexture: 0
linearTexture: 0
fadeOut: 0
borderMipMap: 0

textureFormat: 1
maxTextureSize: 2048
textureSettings:
serializedVersion: 2
wrapMode: -1
wrapU: -1
wrapV: -1
wrapW: -1
nPOTScale: 1
lightmap: 0
compressionQuality: 50

crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
- buildTarget: Android
maxTextureSize: 2048
textureFormat: -1
textureCompression: 0
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
- buildTarget: Tizen
maxTextureSize: 2048
textureFormat: -1
textureCompression: 0
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
- buildTarget: PS4
maxTextureSize: 2048
textureFormat: -1
textureCompression: 0
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
- buildTarget: WebGL
maxTextureSize: 2048
textureFormat: -1
textureCompression: 0
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
physicsShape: []
spritePackingTag:
userData:
assetBundleName:

2
ProjectSettings/QualitySettings.asset


shadowProjection: 1
shadowCascades: 2
shadowDistance: 200
shadowNearPlaneOffset: 5
shadowNearPlaneOffset: 2
shadowCascade2Split: 0.33333334
shadowCascade4Split: {x: 0.021409363, y: 0.051549375, z: 0.07213539}
blendWeights: 4

9
Assets/LowEndMobilePipeline.meta


fileFormatVersion: 2
guid: 7a2706b41ea31e54d9e4ca93be22278a
folderAsset: yes
timeCreated: 1481548458
licenseType: Pro
DefaultImporter:
userData:
assetBundleName:
assetBundleVariant:

9
Assets/Plugins.meta


fileFormatVersion: 2
guid: b18282e7b9e41194a9ccbdd7f1e00f91
folderAsset: yes
timeCreated: 1484737171
licenseType: Pro
DefaultImporter:
userData:
assetBundleName:
assetBundleVariant:

9
Assets/LowEndMobilePipeline/LowEndMobilePipelineAsset.asset.meta


fileFormatVersion: 2
guid: 877878ed40e8ad94095582ff91179016
timeCreated: 1489068733
licenseType: Pro
NativeFormatImporter:
mainObjectFileID: 11400000
userData:
assetBundleName:
assetBundleVariant:

145
Assets/LowEndMobilePipeline/LowEndMobilePipelineAsset.cs


namespace UnityEngine.Experimental.Rendering.LowendMobile
{
public enum ShadowCascades
{
NO_CASCADES = 1,
TWO_CASCADES = 2,
FOUR_CASCADES = 4,
}
public enum ShadowType
{
NO_SHADOW = 0,
HARD_SHADOWS,
SOFT_SHADOWS,
}
public enum ShadowResolution
{
_512 = 512,
_1024 = 1024,
_2048 = 2048
}
public class LowEndMobilePipelineAsset : RenderPipelineAsset
{
#region AssetAndPipelineCreation
#if UNITY_EDITOR
[UnityEditor.MenuItem("RenderPipeline/LowEndMobilePipeline/Create Pipeline Asset")]
static void CreateLowEndPipeline()
{
var instance = ScriptableObject.CreateInstance<LowEndMobilePipelineAsset>();
UnityEditor.AssetDatabase.CreateAsset(instance,
"Assets/LowEndMobilePipeline/LowEndMobilePipelineAsset.asset");
}
#endif
protected override IRenderPipeline InternalCreatePipeline()
{
return new LowEndMobilePipeline(this);
}
#endregion
#region PipelineAssetSettings
[SerializeField] private int m_MaxPixelLights = 1;
[SerializeField] private bool m_SupportsVertexLight = true;
[SerializeField] private bool m_EnableLightmaps = true;
[SerializeField] private bool m_EnableAmbientProbe = true;
[SerializeField] private ShadowType m_ShadowType = ShadowType.HARD_SHADOWS;
[SerializeField] private ShadowResolution m_ShadowAtlasResolution = ShadowResolution._1024;
[SerializeField] private float m_ShadowNearPlaneOffset = 2.0f;
[SerializeField] private float m_ShadowDistance = 50.0f;
[SerializeField] private float m_ShadowBias = 0.0005f;
[SerializeField] private ShadowCascades m_ShadowCascades = ShadowCascades.NO_CASCADES;
[SerializeField] private float m_Cascade2Split = 0.25f;
[SerializeField] private Vector3 m_Cascade4Split = new Vector3(0.067f, 0.2f, 0.467f);
public int MaxSupportedPixelLights
{
get { return m_MaxPixelLights; }
private set { m_MaxPixelLights = value; }
}
public bool SupportsVertexLight
{
get { return m_SupportsVertexLight; }
private set { m_SupportsVertexLight = value; }
}
public bool EnableLightmap
{
get { return m_EnableLightmaps; }
private set { m_EnableLightmaps = value; }
}
public bool EnableAmbientProbe
{
get { return m_EnableAmbientProbe; }
private set { m_EnableAmbientProbe = value; }
}
public ShadowType CurrShadowType
{
get { return m_ShadowType; }
private set { m_ShadowType = value; }
}
public int ShadowAtlasResolution
{
get { return (int) m_ShadowAtlasResolution; }
private set { m_ShadowAtlasResolution = (ShadowResolution) value; }
}
public float ShadowNearOffset
{
get { return m_ShadowNearPlaneOffset; }
private set { m_ShadowNearPlaneOffset = value; }
}
public float ShadowDistance
{
get { return m_ShadowDistance; }
private set { m_ShadowDistance = value; }
}
public float ShadowBias
{
get { return m_ShadowBias; }
private set { m_ShadowBias = value; }
}
public int CascadeCount
{
get { return (int) m_ShadowCascades; }
private set { m_ShadowCascades = (ShadowCascades) value; }
}
public float Cascade2Split
{
get { return m_Cascade2Split; }
private set { m_Cascade2Split = value; }
}
public Vector3 Cascade4Split
{
get { return m_Cascade4Split; }
private set { m_Cascade4Split = value; }
}
#endregion
}
}

12
Assets/LowEndMobilePipeline/LowEndMobilePipelineAsset.cs.meta


fileFormatVersion: 2
guid: bf2edee5c58d82540a51f03df9d42094
timeCreated: 1488808083
licenseType: Pro
MonoImporter:
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

9
Assets/LowEndMobilePipeline/TestScenes.meta


fileFormatVersion: 2
guid: 2c0fa72aa713a664b9be2de857697293
folderAsset: yes
timeCreated: 1488808638
licenseType: Pro
DefaultImporter:
userData:
assetBundleName:
assetBundleVariant:

9
Assets/LowEndMobilePipeline/Editor.meta


fileFormatVersion: 2
guid: 316ed34724625cb47b31136769381b57
folderAsset: yes
timeCreated: 1484576996
licenseType: Pro
DefaultImporter:
userData:
assetBundleName:
assetBundleVariant:

12
Assets/LowEndMobilePipeline/LowEndMobilePipeline.cs.meta


fileFormatVersion: 2
guid: ae13646e45aa3634da32df7c7da1c380
timeCreated: 1481548757
licenseType: Pro
MonoImporter:
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

1001
Assets/LowEndMobilePipeline/TestScenes/LDRenderPipelineVikingVillage/LightingData.asset
文件差异内容过多而无法显示
查看文件

8
Assets/LowEndMobilePipeline/TestScenes/LDRenderPipelineVikingVillage/LightingData.asset.meta


fileFormatVersion: 2
guid: 8964f843d8f1330418cbd7ae5166468f
timeCreated: 1485353234
licenseType: Pro
NativeFormatImporter:
userData:
assetBundleName:
assetBundleVariant:

1001
Assets/LowEndMobilePipeline/TestScenes/LDRenderPipelineVikingVillage/Lightmap-0_comp_light.exr
文件差异内容过多而无法显示
查看文件

68
Assets/LowEndMobilePipeline/TestScenes/LDRenderPipelineVikingVillage/Lightmap-0_comp_light.exr.meta


fileFormatVersion: 2
guid: 14d1fbf0126a7714e902a309b22a8261
timeCreated: 1485353218
licenseType: Pro
TextureImporter:
fileIDToRecycleName: {}
serializedVersion: 4
mipmaps:
mipMapMode: 0
enableMipMap: 1
sRGBTexture: 1
linearTexture: 0
fadeOut: 0
borderMipMap: 0
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:
filterMode: 1
aniso: 3
mipBias: 0
wrapMode: 1
nPOTScale: 1
lightmap: 0
compressionQuality: 50
spriteMode: 0
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: 0
alphaIsTransparency: 0
spriteTessellationDetail: -1
textureType: 6
textureShape: 1
maxTextureSizeSet: 0
compressionQualitySet: 0
textureFormatSet: 0
platformSettings:
- buildTarget: DefaultTexturePlatform
maxTextureSize: 2048
textureFormat: -1
textureCompression: 0
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
spriteSheet:
serializedVersion: 2
sprites: []
outline: []
spritePackingTag:
userData:
assetBundleName:
assetBundleVariant:

1001
Assets/LowEndMobilePipeline/TestScenes/LDRenderPipelineVikingVillage/ReflectionProbe-0.exr
文件差异内容过多而无法显示
查看文件

69
Assets/LowEndMobilePipeline/TestScenes/LDRenderPipelineVikingVillage/ReflectionProbe-0.exr.meta


fileFormatVersion: 2
guid: c951fbe54fa631144a45d6aea2bc237f
timeCreated: 1485353234
licenseType: Pro
TextureImporter:
fileIDToRecycleName:
8900000: generatedCubemap
serializedVersion: 4
mipmaps:
mipMapMode: 0
enableMipMap: 1
sRGBTexture: 1
linearTexture: 0
fadeOut: 0
borderMipMap: 0
mipMapFadeDistanceStart: 1
mipMapFadeDistanceEnd: 3
bumpmap:
convertToNormalMap: 0
externalNormalMap: 0
heightScale: 0.25
normalMapFilter: 0
isReadable: 0
grayScaleToAlpha: 0
generateCubemap: 6
cubemapConvolution: 1
seamlessCubemap: 1
textureFormat: 1
maxTextureSize: 2048
textureSettings:
filterMode: 2
aniso: 0
mipBias: 0
wrapMode: 1
nPOTScale: 1
lightmap: 0
compressionQuality: 50
spriteMode: 0
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: 0
spriteTessellationDetail: -1
textureType: 0
textureShape: 2
maxTextureSizeSet: 0
compressionQualitySet: 0
textureFormatSet: 0
platformSettings:
- buildTarget: DefaultTexturePlatform
maxTextureSize: 2048
textureFormat: -1
textureCompression: 1
compressionQuality: 100
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
spriteSheet:
serializedVersion: 2
sprites: []
outline: []
spritePackingTag:
userData:
assetBundleName:
assetBundleVariant:

1001
Assets/LowEndMobilePipeline/TestScenes/Textures/154.JPG
文件差异内容过多而无法显示
查看文件

1001
Assets/LowEndMobilePipeline/TestScenes/Textures/154_norm.JPG
文件差异内容过多而无法显示
查看文件

108
Assets/LowEndMobilePipeline/TestScenes/Textures/154_norm.JPG.meta


fileFormatVersion: 2
guid: 3f3b8bdf3ccd30c4fb97b62bd26ef1f6
timeCreated: 1484052977
licenseType: Pro
TextureImporter:
fileIDToRecycleName: {}
serializedVersion: 4
mipmaps:
mipMapMode: 0
enableMipMap: 1
sRGBTexture: 0
linearTexture: 0
fadeOut: 0
borderMipMap: 0
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:
filterMode: -1
aniso: -1
mipBias: -1
wrapMode: -1
nPOTScale: 1
lightmap: 0
compressionQuality: 50
spriteMode: 0
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: 0
spriteTessellationDetail: -1
textureType: 1
textureShape: 1
maxTextureSizeSet: 0
compressionQualitySet: 0
textureFormatSet: 0
platformSettings:
- buildTarget: DefaultTexturePlatform
maxTextureSize: 2048
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
- buildTarget: Standalone
maxTextureSize: 2048
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
- buildTarget: iPhone
maxTextureSize: 2048
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
- buildTarget: tvOS
maxTextureSize: 2048
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
- buildTarget: Android
maxTextureSize: 2048
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
- buildTarget: Windows Store Apps
maxTextureSize: 2048
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
spriteSheet:
serializedVersion: 2
sprites: []
outline: []
spritePackingTag:
userData:
assetBundleName:
assetBundleVariant:

1001
Assets/LowEndMobilePipeline/TestScenes/Textures/168.JPG
文件差异内容过多而无法显示
查看文件

1001
Assets/LowEndMobilePipeline/TestScenes/Textures/168_norm.JPG
文件差异内容过多而无法显示
查看文件

108
Assets/LowEndMobilePipeline/TestScenes/Textures/168_norm.JPG.meta


fileFormatVersion: 2
guid: d63435d934a30fd439a005c25fa542f0
timeCreated: 1484053141
licenseType: Pro
TextureImporter:
fileIDToRecycleName: {}
serializedVersion: 4
mipmaps:
mipMapMode: 0
enableMipMap: 1
sRGBTexture: 0
linearTexture: 0
fadeOut: 0
borderMipMap: 0
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:
filterMode: -1
aniso: -1
mipBias: -1
wrapMode: -1
nPOTScale: 1
lightmap: 0
compressionQuality: 50
spriteMode: 0
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: 0
spriteTessellationDetail: -1
textureType: 1
textureShape: 1
maxTextureSizeSet: 0
compressionQualitySet: 0
textureFormatSet: 0
platformSettings:
- buildTarget: DefaultTexturePlatform
maxTextureSize: 2048
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
- buildTarget: Standalone
maxTextureSize: 2048
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
- buildTarget: iPhone
maxTextureSize: 2048
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
- buildTarget: tvOS
maxTextureSize: 2048
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
- buildTarget: Android
maxTextureSize: 2048
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
- buildTarget: Windows Store Apps
maxTextureSize: 2048
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
spriteSheet:
serializedVersion: 2
sprites: []
outline: []
spritePackingTag:
userData:
assetBundleName:
assetBundleVariant:

108
Assets/LowEndMobilePipeline/TestScenes/Textures/154.JPG.meta


fileFormatVersion: 2
guid: 618126695341ad844ac048b062fd2688
timeCreated: 1484139434
licenseType: Pro
TextureImporter:
fileIDToRecycleName: {}
serializedVersion: 4
mipmaps:
mipMapMode: 0
enableMipMap: 1
sRGBTexture: 1
linearTexture: 0
fadeOut: 0
borderMipMap: 0
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:
filterMode: -1
aniso: -1
mipBias: -1
wrapMode: -1
nPOTScale: 1
lightmap: 0
compressionQuality: 50
spriteMode: 0
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: 0
spriteTessellationDetail: -1
textureType: 0
textureShape: 1
maxTextureSizeSet: 0
compressionQualitySet: 0
textureFormatSet: 0
platformSettings:
- buildTarget: DefaultTexturePlatform
maxTextureSize: 2048
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
- buildTarget: Standalone
maxTextureSize: 2048
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
- buildTarget: iPhone
maxTextureSize: 2048
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
- buildTarget: tvOS
maxTextureSize: 2048
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
- buildTarget: Android
maxTextureSize: 2048
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
- buildTarget: Windows Store Apps
maxTextureSize: 2048
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
spriteSheet:
serializedVersion: 2
sprites: []
outline: []
spritePackingTag:
userData:
assetBundleName:
assetBundleVariant:

108
Assets/LowEndMobilePipeline/TestScenes/Textures/168.JPG.meta


fileFormatVersion: 2
guid: 70218f73fcdf828428151dfdd3104a8f
timeCreated: 1484139437
licenseType: Pro
TextureImporter:
fileIDToRecycleName: {}
serializedVersion: 4
mipmaps:
mipMapMode: 0
enableMipMap: 1
sRGBTexture: 1
linearTexture: 0
fadeOut: 0
borderMipMap: 0
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:
filterMode: -1
aniso: -1
mipBias: -1
wrapMode: -1
nPOTScale: 1
lightmap: 0
compressionQuality: 50
spriteMode: 0
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: 0
spriteTessellationDetail: -1
textureType: 0
textureShape: 1
maxTextureSizeSet: 0
compressionQualitySet: 0
textureFormatSet: 0
platformSettings:
- buildTarget: DefaultTexturePlatform
maxTextureSize: 2048
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
- buildTarget: Standalone
maxTextureSize: 2048
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
- buildTarget: iPhone
maxTextureSize: 2048
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
- buildTarget: tvOS
maxTextureSize: 2048
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
- buildTarget: Android
maxTextureSize: 2048
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
- buildTarget: Windows Store Apps
maxTextureSize: 2048
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
spriteSheet:
serializedVersion: 2
sprites: []
outline: []
spritePackingTag:
userData:
assetBundleName:
assetBundleVariant:

9
Assets/LowEndMobilePipeline/TestScenes/LDRenderPipelineBasicScene.meta


fileFormatVersion: 2
guid: 36930a06efb38b44c86d80533989a6de
folderAsset: yes
timeCreated: 1483973859
licenseType: Pro
DefaultImporter:
userData:
assetBundleName:
assetBundleVariant:

8
Assets/LowEndMobilePipeline/TestScenes/LDRenderPipelineBasicScene.unity.meta


fileFormatVersion: 2
guid: 57e3c6f39b3e40b408a2baf5b0da667c
timeCreated: 1478094608
licenseType: Pro
DefaultImporter:
userData:
assetBundleName:
assetBundleVariant:

9
Assets/LowEndMobilePipeline/TestScenes/LDRenderPipelineVikingVillage.meta


fileFormatVersion: 2
guid: f5d2527b6ab9ac44fae5ddb09815a06c
folderAsset: yes
timeCreated: 1485351913
licenseType: Pro
DefaultImporter:
userData:
assetBundleName:
assetBundleVariant:

8
Assets/LowEndMobilePipeline/TestScenes/LDRenderPipelineVikingVillage.unity.meta


fileFormatVersion: 2
guid: 222d58b393f3d49449c563db79a5eda0
timeCreated: 1474278095
licenseType: Pro
DefaultImporter:
userData:
assetBundleName:
assetBundleVariant:

9
Assets/LowEndMobilePipeline/TestScenes/Materials.meta


fileFormatVersion: 2
guid: c9d437025dec47d4d9d9bd15677b3b27
folderAsset: yes
timeCreated: 1484053031
licenseType: Pro
DefaultImporter:
userData:
assetBundleName:
assetBundleVariant:

9
Assets/LowEndMobilePipeline/TestScenes/Textures.meta


fileFormatVersion: 2
guid: 98c3b3cfcb4825841bc50a4c8142c9f1
folderAsset: yes
timeCreated: 1484052961
licenseType: Pro
DefaultImporter:
userData:
assetBundleName:
assetBundleVariant:

1001
Assets/LowEndMobilePipeline/TestScenes/LDRenderPipelineBasicScene.unity
文件差异内容过多而无法显示
查看文件

8
Assets/LowEndMobilePipeline/TestScenes/LDRenderPipelineBasicScene/LightingData.asset


1;�1 2017.1.0a3������:'���BIr���:�b���7���������� �� ��".�+���� ��".�+H��������1�1����� @���
Q�j� 4C���� Je���� ��z����1�1���������j�P��������������������������0���� �� ������ ��!��!"��%#��)$��-%��1&��5����'1�1�����(���)��j� * ��@+ ��B, ��D- ��F����.1�1�����/���0Rj�1`h2��o3��x4���5���6���7���8���9���:���;���<���=���>���?���@���A���B��C��D������E1�1�����F���G��j� H ��@I ��BJ ��DK ��!����L1�1�����M���N�j�O`��P��oQ��xR���S���T���U���V���W���X���Y���Z���[���\���]���^���_���`��
�a��F����b1�1�����c���dZj�le��of��vg��}h���i���j���k���l���m���n���o���p���q���r���s���t���u���v���w���x���y���z��{�� |��}��~����%���,�����1�1����������Bj������;�V�����1�1������������j��;�q�����1�1������������j��;�}�����1�1����������5�j��LightProbesPPtr<EditorExtension>m_FileIDm_PathIDLightProbeDatam_DataProbeSetTetrahedralizationm_Tetrahedralizationm_TetrahedraTetrahedronindices[0]indices[1]indices[2]indices[3]neighbors[0]neighbors[1]neighbors[2]neighbors[3]Matrix3x4fmatrixe00e01e02e03e10e11e12e13e20e21e22e23m_HullRaysxyzm_ProbeSetsProbeSetIndexHash128m_Hashbytes[0]bytes[1]bytes[2]bytes[3]bytes[4]bytes[5]bytes[6]bytes[7]bytes[8]bytes[9]bytes[10]bytes[11]bytes[12]bytes[13]bytes[14]bytes[15]m_Offsetm_Sizem_Positionsm_NonTetrahedralizedProbeSetIndexMapm_BakedCoefficientsSphericalHarmonicsL2sh[ 0]sh[ 1]sh[ 2]sh[ 3]sh[ 4]sh[ 5]sh[ 6]sh[ 7]sh[ 8]sh[ 9]sh[10]sh[11]sh[12]sh[13]sh[14]sh[15]sh[16]sh[17]sh[18]sh[19]sh[20]sh[21]sh[22]sh[23]sh[24]sh[25]sh[26]m_BakedLightOcclusionLightProbeOcclusionm_ProbeOcclusionLightIndexm_Occlusionm_OcclusionMaskChannel`���-�G�2��(����1� �7������������ ��(.�1���� ��(.�1H��������1�1����� @���
Q�j� ��:���� 1�1����� ���Fj�$��S ��(.�1��^ ��(.�1��l ��(.�1y� ��(.�1�����l��������� ���!���"���#��$�� %��&��'�� (��')��.*��5+��<,��C-��J.��Q/��X0��_1��f2��m3��t4��{5���6���7���8�������91�1�����:���;�j�P<�� =��(>.�1?���@ ���A ���B ���C ���D ���E ���F ���G ���H ���I ��J��K��&L ���M ���N ���O ���P ��1Q ���R ���S ���T ���U ��C����V1�1�����W���X`j�Y.�vZ.��[������\�������]1�1�����^���_�j�@`y�� a��(b.�1c���d ���e ���f ���g ���h ��
ij��(k��1l��:m��Cn��Lo��Up��^q��gr��ps��yt���u���v���w���x���y���z�{���(|���1}���:~���C���L����U����^����g����p����y����������������������������������������1�1�����������j�4����������� ������#�0���(���1���:���C���L���U���^���g���p���y�������������������������@���(���1���:���C���L���U���^���g���p���y���������������������������T�����1�1����������j����(���1���:���C���L���U���^���g���p���y���������������������������`�����1�1����������pj����������(���1���:���C���L���U���^���g���p���y�������������������������������������1�1�����������j� ���������������������1�1����������`j��.�v�.�����!�����1�1����������`j��.�v�.�����*�����1�1����������?j� ���Q���j������������1�1������������j� ���(.�1�������1�1��������`j�.�v.����������1�1����� @���
��j� ��� LightingDataAssetPPtr<EditorExtension>m_FileIDm_PathIDm_LightmapsLightmapDatam_Lightmapm_DirLightmapm_ShadowMaskPPtr<LightProbes>m_LightProbesm_LightmapsModeSphericalHarmonicsL2m_BakedAmbientProbeInLinearsh[ 0]sh[ 1]sh[ 2]sh[ 3]sh[ 4]sh[ 5]sh[ 6]sh[ 7]sh[ 8]sh[ 9]sh[10]sh[11]sh[12]sh[13]sh[14]sh[15]sh[16]sh[17]sh[18]sh[19]sh[20]sh[21]sh[22]sh[23]sh[24]sh[25]sh[26]m_LightmappedRendererDataRendererDataPPtr<Mesh>uvMeshterrainDynamicUVSTxyzwterrainChunkDynamicUVSTlightmapIndexlightmapIndexDynamiclightmapSTlightmapSTDynamicm_LightmappedRendererDataIDsSceneObjectIdentifiertargetObjecttargetPrefabEnlightenSceneMappingm_EnlightenSceneMappingm_RenderersEnlightenRendererInformationrendererdynamicLightmapSTInSystemsystemIdHash128instanceHashbytes[0]bytes[1]bytes[2]bytes[3]bytes[4]bytes[5]bytes[6]bytes[7]bytes[8]bytes[9]bytes[10]bytes[11]bytes[12]bytes[13]bytes[14]bytes[15]geometryHashm_SystemsEnlightenSystemInformationrendererIndexrendererSizeatlasIndexatlasOffsetXatlasOffsetYinputSystemHashradiositySystemHashm_Probesetsm_SystemAtlasesEnlightenSystemAtlasInformationatlasSizeatlasHashfirstSystemIdm_TerrainChunksEnlightenTerrainChunksInformationnumChunksInXnumChunksInYm_EnlightenSceneMappingRendererIDsm_Lightsm_LightBakingOutputsLightBakingOutputprobeOcclusionLightIndexocclusionMaskChannellightmappingMaskm_BakedReflectionProbeCubemapsm_BakedReflectionProbesm_EnlightenDatam_EnlightenDataVersion@��H��H@
<'��S��I�3�UO�-1�ʭ�G��A��R�@ LightingDataLightingDataAsset��*@��v�;>l����<���d���R�;NAV<$��q��<�Fh>$�*=��i<��5P��K�1<�L�<�����%=�ߖ>�/�=��<d��� 9L��x�<��<�B5�tC=�?�?�?�?��G>G>J>�?�?�?�?�?�?����+=��+=@I?�?�?�?�?�?�?��H>H>�?�?�?�?�?�?��G>G>I>J?�?�?�?�?�?�?��G>G>��>�?�?�?�?�?�?����+=��+=>@I?�?�?�?�?�?�?��H>H>I>�?�?�?�?�?�?�?���O>�O>!�?�(I>�?�?�?�?�?�?����+=��+=�=@I?�?�?�?�?�?�?��[+`=[+`=h=nlk?�?�?�?�?�?�?��G>G>��>J>�?�?�?�?�?�?����+=��+=4=@I?�?�?�?�?�?�?��H>H>I>J>�?�?�?�?�?�?��H>H>�>�?�?�?�?�?�?��H>H>J>�?�?�?�?�?�?��H>H>I>�>�?�?�?�?�?�?��G>G>?�?�?�?�?�?�?��H>H>�?�?�?�?�?�?�?��G>G>J?�?�?�?�?�?�?��[+`=[+`=�=nlk?�?�?�?�?�?�?��D1!>D1!>�\'���P?�?�?�?�?�?�?��[+`=[+`=nlk?�?�?O��C��RdG�z���d��5=\(_F�.dEKP�wCh�44fR �e�ZY OL�v�*��� �����)� a)F{~mp�J5�V�V�X��J�BnQ\�eV?$�b���q�S�x�������������������������͇;UnityFS5.x.x2017.1.0a3;
�Pk

9
Assets/LowEndMobilePipeline/TestScenes/LDRenderPipelineBasicScene/LightingData.asset.meta


fileFormatVersion: 2
guid: 740b181ab47c46a47ae28377711d7097
timeCreated: 1488962999
licenseType: Pro
NativeFormatImporter:
mainObjectFileID: 25800000
userData:
assetBundleName:
assetBundleVariant:

1001
Assets/LowEndMobilePipeline/TestScenes/LDRenderPipelineBasicScene/Lightmap-0_comp_light.exr
文件差异内容过多而无法显示
查看文件

72
Assets/LowEndMobilePipeline/TestScenes/LDRenderPipelineBasicScene/Lightmap-0_comp_light.exr.meta


fileFormatVersion: 2
guid: c3725aec356fa894fa33910a5551f44f
timeCreated: 1488962997
licenseType: Pro
TextureImporter:
fileIDToRecycleName: {}
serializedVersion: 4
mipmaps:
mipMapMode: 0
enableMipMap: 1
sRGBTexture: 1
linearTexture: 0
fadeOut: 0
borderMipMap: 0
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: 3
mipBias: 0
wrapU: 1
wrapV: 1
wrapW: 1
nPOTScale: 1
lightmap: 0
compressionQuality: 50
spriteMode: 0
spriteExtrude: 1
spriteMeshType: 1
alignment: 0
spritePivot: {x: 0.5, y: 0.5}
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
spritePixelsToUnits: 100
alphaUsage: 0
alphaIsTransparency: 0
spriteTessellationDetail: -1
textureType: 6
textureShape: 1
maxTextureSizeSet: 0
compressionQualitySet: 0
textureFormatSet: 0
platformSettings:
- buildTarget: DefaultTexturePlatform
maxTextureSize: 2048
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
spriteSheet:
serializedVersion: 2
sprites: []
outline: []
physicsShape: []
spritePackingTag:
userData:
assetBundleName:
assetBundleVariant:

198
Assets/LowEndMobilePipeline/TestScenes/LDRenderPipelineBasicScene/ReflectionProbe-0.exr


v/1channelschlist7BGRcompressioncompressiondataWindowbox2i�displayWindowbox2i�lineOrderlineOrderpixelAspectRatiofloat�?screenWindowCenterv2fscreenWindowWidthfloat�?Y~.�aĄ-�T����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������}������������������������������������������������������������������������������������������������������_�����o�����o����^Ɠ������_��n����'��>�ɛꩭ����`���}߮ꪒ�Y1�B!�+�tEQ�q�q��$�I(��,��,��,� 0� 4� �M4�{4�8 �ӎ4����8�8����;��;ӿ ;������`��N���ӿ�;���i;��̎�����0;�ӿ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������N����(���l��0�������;�#�;�C�;�3�;��;��8���;ӻ;Ӽ;ü;��;��8�Ӏ8�4��� ;��4Ӎ�N4�8Î0Ӎ��4�N��N4�L�@4�M8Ӎ0�L8� 0�M4� 0� 0� 0Ӎ0��0��,��0��,��(��(��(�I$�I$�H � �q�q�q�q� rq�aN�����K�e�%�԰h�����5.H�@` �� $`�-$Q��(��"�邬�2�e��!�<2
�jd!0��e�����j�i��m=�V�^�7T9� -PF>��pp�ځ� ����VB�O��� /�(��(('܂��z����!q �C!q�C �S�>������$��#�=+�S=+�ҽ---+��+�SS=55Sm"����y
�)�D� ?��4���K�ˈKˈK������ś2h�#�X<I�b��,f��%`�Z)2`���rCm���퍷li�cw�p�����dk���N'N�'�*V�]Z%up�4��iAAAA???>�=:���T<�A �H$ �AP�
v.vy� ��"IH��IIH��J���KKKKJ��J�l�}��D�OJ���dR*��� ?�`,�`��K���0.���� fAQ�EB�Ib�F�bL� ��,�dQ�,�... %B� �e�������l��9�q^�: j��di��Q
����(T�Y�*�ud
�4��i�����~�}��~~u�g\q�'����� �AP� �93' y����(�ܒ�������^��i^����~>��Ӎ� X��j^E"��>O��� /��,!+, ,����,q`����f\dH(���,a��1`�72p����d�0��2�AYP�TĆl]�6.��.{�� ^��X�=#mXX�cBv�4�kJЫ�B��
�+�����K���zq������NM���,Q ��yEEEEEEC��=;����#�zG������zJG$��x덭F�===C�����Ȟ�O��� 0@** ʆK,. ʅ��X0X �K*2ɐ�� b�P:`�d�00a�%�(�Bɂ`��ra2��W`��e�$I�[i�%6�\� 9� Z�X�-L�Rԭ+h��m;J�P��ZEd
�+ W��O������=??8㓓���SSso5HD����*)�*��ܞ�ɞ������GH�ѽ%%A��V���rzzzg��mL�CS!r� ?��4�
��|��|���
��p����KE�d*3 �-2:aS�y#LJf��72<NLx����$��n{�m��9îa�*֖��z�ն���<Ӛj����B��Ыz� ?��4��q�����q�לqǛ��p��MMG�qZz��'��z��rjjg��zjzzjj��U2*�H�TĒ��=+�SSS�S=3ӹC���\����4��i���I� �2��X(*%B�\T0X �Í`�F(�P�����d&d�$��&��&�f �� 0I�� a3�x��s����kYZ��SZ�k֪h��������m+mcB%jU�Y
� ?��4���\����M��ۍ8���G��������"OOL��L�ZjZjW�rW&�����XD�/"�<��ZZZZZW&zW��zg���rzvԼ��.!�����L��ʈYa��$�� �qP���RYs9���Q�A��PB(���G\��2clɎ�b��`u��q�7!�i��Fֽh��ѵ��m=�֞��V��{c�=��6���� ?��4��q��8��:㓓N755�ǜ=p�z=4�=3��------3��=-5-55B�54���-#��#�ҽ-+�93�SSSS�3ӽKԽK�4��i����QC%[&J�"���EY�EJ����@*.�# �F@�P�(�:����I��fI�L�0ZL� 0Y�ReXf
�e�X��[ZF��H֧Z�h *h��m�mcdM,lD����X��ִB��d�� ?�_Ͻ�ήm�^�x��y�x���p�c�p�v:����ԏJ��IJ䴏KKJ�����L��J�JJ:JJJG$������rjZjjjjg��`4��i���!`�0��2fP-fP,ĕ�.P(*�P�Ì��3 ���;��F� ��h��7�&�cd���{�$#$��E�<ek֌�zѕ��+kF�{cm�m�7lq��:ݳ�-Y��O����B���8��N6q�疟\ۍ6>���=��qÏ��5�G�i�RRRRR�%
�W998�*��=�R=#�=%#�R���9--5555;�`4��i��� �Yl��`Z`�2L�d�(H��P@**P�p�� � �F@aFY0�a`�b2����X2Y9P�@b�bD�&�#.Mv&�%��$O{@�j��Z�h4i[M6��n����ց�m6�ֶ�X�m�jO��� /�\ny��&$}sN997755>��^;p��9\e�/��cQ��m�k�qsssn6�n96��
����=#��RRR�RR=-5+��=53�>O��� /�9E�‹I�YZPBMraa5� ���QI@������&\( �.`%0� ԫ����R��سE‚� ׮^�mw����R�u���m ��2ݱ���7lm��{��sBe���i������y�D��\ۍN�����\}Ʀ��y�8qq�ۆ�0����c.��\0����Ӎ�����<���P*F�oD�ttoIIIIIJ������$�N�O��� /�%0Y�b�J.(LdQ�Y(2a��1FA[!s� ��|�+.�s�p �
��`�e%�%�԰h�%�%�̑rHd��"k��H���$#ֹ�m�m�6�v�l���� ��N��h��5�V*�����K�c��G4���.m��M�m#���u��p����.pÆc��f1�<b2�皚���y����y�hފ�������))))^�����������L� ��*�=&�@��¡aW �&e�B�I���F 2�� K�. 8�3-, �K2��̴�;.F�PJ�P��
�6H6JH>IK��Zi틷la��]h�c C�\�:Ӗ�.�O��� /詚R�  �.8��Z~zu��p�h\r8���\8�yq��a�x�a���]�����>�Oy����T���������� y�ם���q� ?��4��L.a�X�
0(H��L�IS���`�@?0*X�`� C�.0��W**�p�bE��[.,FX4X
,$��2@T`� (��a �}����m��֕ZF��Z��-�j�l+ U��O���
�%]�^���&x����mj\㍮8��g�`iq��e�1��.0��Æ.�x���.��ǣ����ӍM����4/ED�N<H��������<��;O��� /��Í�Mq��b��� `�q��C��NQ�A�YPxY�A�bEBR���Z, J.X�\�HYłB���\��NI䂂V��R�� XS6�Aj�kB��Z�{AƫC�kC�V�z� ?��4����\�uOJ�r6�=+\��3�6����\qi�x�e���<qㄆ0�w ��������MMMMMN�B㤇����&��q��rnnnO��� 0����Dd�!�;b�
�@�E�`Q�5`�0U��X��J(PT�-(*P�����r�e��*�OX�O ���Ȯ��;Ȝ�m�%�H���i���*
H���LG��O��󓓎78��7776����N���P����OOOOP��OOP���X�D�2'��=L��dO"�q���R)�@�V�@�
��H$ ���4��i
�L̼�l��lR(�.`'0ذٕ$�ذ>M�&�c�XfP|����)(<Qrg"rޅ��}�^��_E��G}��kZicDgH�Ft�Ft�FuS��4��i����nq�����njm��p�������������ON���N��N�˦rg�X�������D�2*�L���U.HI%%+d �T8�A �t�� ?�_��`!10��Te€���L2
`\,2X`'`�`����.ȡ@���G�(�
2M�$�dʰ�ě�����#���]�t7V�eY
�l��j��k�$�o#LF�#quP�4��i776�O6�N54��8v:��㐐�zzjg'zw��rjw&zjjg�rZG���VB�/SR�2������=L��::7��zG�z�EC�8���4��i� ��
�.d(0�!9�˃�0�8�)��X,D(<Ł���91�n(:VPt���Gf��`�n@��^��=�= �;���X.��]k֌-�4�i�:�����@i������ӍM<�}��4���c��ۇ7V�驩�����驜�ɜ�t�IIJ���N�K�d2�jj^������*'#z::::G������<�O��� 0! ��������ˀx\ 0c �!PZ,���X�pZX�
0$`��_(,P
2X��`��,�H�ba�eX\�e���sn�V�"X�U�XB���kS-T����HF�ReI���'U��O����=6��~j<��r9�8i�O��j��53ҹ53���93�9#��%%%%%+ӫ!y �C!�ԽKԽC(����������������* 4��i���.�������E���w�������Ł������d����e%$Ȼ/d`���, �{�.y�ϿA|���2�ՉV=`�c։�֋��i�-h�ҧ�6��O��� /�4�s�6���#��ۆ�7�FcNx��%����zG�z7#���zJG�z:7#rud��^C!��CD�4T4TTtoD�tt��zz��� ?��4� `�g ����J�K,�h�#��$ŗ��1 �]\�H�@– ea�,���fɖBF {Ƀ� ��rM���ܭ�QVB�²���J��)Z
U-z�KA��m*iRХR�M�N�O��� /��qi٨�u��\n7�Ɯ3�F1p��W����r:*****'#���rG�VB�8����z****7���m=EEC�4��i����K��T^T���\X$T�qp��!Pf,�`R �.�
��I�P\���dN͑;6D��L\���;�Ȝy��eieb5ubE�V$YX%X��U�hL�� ڴ.ӚZңJ��O��� /���8uq��<uÑ��u�K��#��b1���$�r5�QQQ=�Ҭ y 4AAACB�TOEEEEGH��������K����iP�P� Ń@vX0T KK��hP"��X`�.��/ �  ���(�d �d�L�L�d�eɅɗ& &d�$��խXB�Z�*ЫR��V%X�h�J� i[G�V� J�iZԪ�@i������v;pӆ�q��C��Cd��4�����D���x�'�T�����訨h��������������@��@�B�444TTTTOEH��π����K�<(L�8*��ܳ�b�,
e�X�qPnYr��Uq@d(�`Qp�(�FAт"���
Y3dHNLHN���"A�ɮ\������
��
��M�#i� �%i� �{bv���֕@i�������q� F�1��a�/p�C�p�ƣ��<N�4M0$x�$x�`��/CCCCCBㄇIG#�J�8��������PP���н �QQQ�;�4��i����L`��[&
�**X ����E���>\��
�( Y �и
�pZ,XT
�` .@`!0� �E�����rEWap'.���MpI2�׶�,R�����Ki[@�Ҷ�i[@��ƛic@44���"jO��� /�))(�`f0���b0�x��# F�0���"X��BB(��(��(�"��E�� .6��m�N���qǚ#<�����?<�ACCB�/B�/B�TO�����K�t�Q;-0"a��Y�,�E偑��AHU¡ ���<Q� �V( L8�110 LLi��B�k�eܸ7]냅���) ��w��V�=`}mh���"i��{BF� �#h�ЭQR( ?��4���nubJJ7#�&<��^'x�'p��X��O$&x�q"���(�q C�1 A<i�Opˆ�Q����sDg���zz}��}������\��m��������K��E���`�eE����������, ��@1��t�@��Fd�� ����ɀ����p90��B` $x�2FI\
0,H� ���z�%�%�T�K$�֒4���"i�@�Y��I�4��i����7�F�S���ѽ !�ˉ�7 "8�%��$\Dؕ�H�qB� @�ADw��c1�ˆ�Q�ۇ�μ���8���<�����P<�/�F�3��O��pQ��YPlUi`�b�VV�&&�k � X0 � V0U�@N2��&$\�.Xqp`a�����
X���JJH%a䁱&��(xue`Z����Z5h>��B�E�unV �Մ�R( ?��4���m�.p�f2ᇚX����\�Ȟu�)ABHA�BG� �(��8�p�@�>���� F#��f2�� G��<�θ���ϸ��ǘ�<f4���e������K�J
�d��PJ�
�,,�%� bb�0��@��� ���`EB�!@ �L6X.�p|����A0#0�d���.� >`� �U�?$T��ւJ�a�&����P��@IV@�ujU�%Z�K�%U��O���� Fc1���b1���V����A<�L�
��[8<��@�#�n�b%�뇞lL�e��F^3��iäG'u秣���x��1�8a�1����4��i���JQr�̬�HVT$-,ZX&.@\@Qi0�+��M�RdQ�G.�p,���v� ����a����y�a!) h�� X��`&`����Z�V ��T+z�h����Ճuk��uOU��O���� �c.p���w �x��w �X���=:��:��d<L;�ׇa�[<Dؑ�� ��.%V/��a���cQ�#��D�4M<OxӇx�i�����O����Ah���`Łx\��^\.A����I� ���r` .L!&`���2
�K*X2X ��J�X2X� �ØyF�x]���mkbʹ�n�.��7H-DKHU B��!�B�)B�L�� ?��4����5�<iq��c.���toIH䔎H䔎H䔏IGF��H��F�oL��U.!�H�A z�H$ �A!y ����=53��R�+�ҹ3�4��i���� �^, E\, B��5 �. C ���Arb��L\��'&.͑r���� <��YQr���R㭹��sgl�w��w��y�5�%UcJ���Ԏ)�R�!�'@i������n5x��1��e���%��#z::::7�z:::7#zG#��z7#]�ҪQQQQQQQQ ��HA �H$ ��z�R�SR�����i������ EBP�p]p�/ T
��p)���Ʉ�˓�0L0����`�ip�pP,*P��@p��h��a�ֶ��l8�V��{��z��
���1Y
�%jU�e(�^B�H7R�MJ"( ?��4���(4�� �3�D�;ı3�ˈ��#��r:'�z*7"��r::7"$��h^��U�y���������QP�
R�����}�KJ��KH䴴��4��i�(H�RPP�Jeq`�.���\*�X�CN ��ผ����������yar�.%*�AIA91�j\m�l�vͷ��oq�\'Vd�-T�A�m+�z��m)R�#DU#dNS��O�����F�, p�N�,H�#���FĮ*EEEEEEB�/CD�NEB� �y��zUJ**)ܡ��*****'�q����q�������zJW�i������fEJ�AR�xTX�,.�P!�PX*X4��C@p$4€ 
�.��,�`�p3.,X��@\ȱ@=&a����k�l�m6Ƕ殄v��P��4���Tʵ+,R���>��DH��ȑ�@i������#�����<t��%p�%x�����D،���h�����\��hh??@��F�==;��ӹ;��;�8��<��;:󳳳�>�JJJJJH ?��4� ��)('(�!…��B��8V( B� P>��A�0|<,@LHM̉ �������"���*+* &�DL���$+��l�oq�:���d�9PX��ë+�+C��N�b��5#$R( ?��4�����r:!��p�AH� �+�"�W�'T�����((\}s������=A>�j��C�=EC�TO�rrnnnq���������zG�zJG�i������2(Qr��1�,�d� PdP�*dT�
e� �d4��������d  dP�$ �d��@-*����,�ɖA�3,�\�����5���1]Ru@��:�� X��ma�GXD��a�fD��i28 ?��4��r::7!�r�z��q��Jx�� ��L��~����q��q�����q�24���L�e M8��������뎸���8�h�ޒ�O��� 0r��f\LF˙2�DL��.(J �b��G A�.��#��5ˇʒ(q@�W����d-f�y�"fT�:�n+#
ި)#� �z��S�k+ŕ�b׭�z�:ՄCN#�����K�**!r
� �q���x�q ���C��DGކ}s���;;8󳳳�����Di��l����j>�SSSSs�6󓓓�==@��GG��O�� �2�+&a��a���,���,�l��AB���h��B1`��h��B�� �
ܠa�
����@(d�!�L���dU���9�224�jӪ4�:�
U(T�Y�ńK4F�@�R��H։֪X��1�� ?�_й ���Ϲ�8�����Ͱ!(p[�; ^0���O8��g'''''g'gggg��}��x�~?y��l��N��N8��N�6��ۀ����K���2#&�b"n& ė�s!�l��8�t��R\�pL.*,� P�A�N  ��0��q@�6C�������\�P�LF�A:���UPP���k[ZZ��Z����б��jЕb�8 ?��4��r
 q�������������x��vxVL*�P�,X'Vm�^vu�8��6��BbB8�$�)p�z=��M��8�������<�����@i�����Ʌɬ&d�0&\���&�f\��A�B� ���������l,
�$
�RPX*1@X*t�F`� �`� � �2E�ap=$���TJ4�B�@T@�j�5�3-#Z��K@�Ҧ�+ZM���-�����K�
�����q��q���睝qǜ�����
�l�+�/
�L)�/
a�Ċ�I Wđ,KđIR=y����p�~i���m����nrru� ?��4���C�V�q0�72&�B�l�Y�\�p���˸�PY��_,,Eʖ���@�+���PHT�1$���*��I���4$���S��Ua2�Մ�\�)i�-V�MV�ڴ4°��� �� ?�_�nF�q��q�����q���y��y�������A0�.B�O �Cb'�b'��'��'b(��rǎG�=p�ǜ>���~>�So777dE���O��� ��l`"2$2�a�`"d I�eC&Y���vX4\ �K��`� ���@XPT�-.. �@ EB1P3`P��L�.I�@0Y�f
0ڥj�*�Y� U-V�ZԫH���ЫPDd�A�I��i������D� �.C��Gg�y�g\rrrrni�����8}����~?�2���xy��?�C�1N�qÑ�G�<�珼}ƞjjj.�~!p�#heT�� ?�_�(������I0��32��VYY0���q�![.,�
*� �8�LR�LRP(PJ
��fK� ��`���R@��d�(���սX;X�@������f�VV�OV V�
U,W��O��� @�?�=C�#:��9999555\uîp�v;x�yñ��v6L>�=$�8?��C�O<N�r9�Gc���z'd=�Xq��?<�π����K� Ń%���BaQ����P��@�����Vȱ@( d�\�J��ʆ 4��IAR�J(*�b���PX�����H��� ���BL.�z�F=�`PZ���T�V�*ea�'�"Z�i�+�R�b�p�4��i�0������ a�v��1����p󇣱��;��c����#���v:��O8㇜6�����^"x��q��ǎG�$6���<�����N�u�`4��i��� E,��.� �c�a�Aʳ _J(X�<*H�;*��������褠:)(Y�%%�IPvVP*(F�qw86���u�\�0�9]C��z���++�^�,Z��֜�:��êޮO��� /�G�.�-�����8�シp�$#5p�v9�G#���r9p�n7�G#�y��g^uǧ��zy��V%�$nnm��rq�ggggW9:�� 3�ܶ֬�ݴپ���m�������߭v�����~����w���??��?s������k�_�����=���������u{���y���������������������������������������������������������������������������������������������������������������������������������������������������}����������������������������������������������������������������������������������������������������������������������������������������������������[����������������������������?������/���/����?���'AAD���O1�clQ�a�a�� $�I(��(��0� ,� 0Ì0� 0Í<ӻ8�����N8ӏ;��8��8�8�
;��;ӿ8�;������#�P;��Ž������ ���;���t;�C���P������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������0�������N�0�����N�\����x�Ŏ��������N�����D�N�P���������\������ ������O;���8�;ÿ;��;��7ӻ;À;�����������N���?�N8�����O4��<����7�@8��8����8�������;����N��8M�M4�@4�@8������� 7��4�L7�@4�4M8��4�L4��4��Í44�O<ӌ4�L4�L4�M0ӌ0�K8� 4�M0�M4� 4� 0� 0� 0��4� 8Ë0� 0� 0��0� ,�
,��0��,��,��,��,��,��,��(��(��(��(��(��(��$��(��(�I$�I$��$�I$�I �I$� �I �H$�I$��(��(� 0��,‹,��$�q���O���;�*�L?P��TP��%Sʁ]Sꄅ����Ls#���T<�x>d������X`v�,��^�v�*2�f�AMS�Md̓U0REDG���m M�B��uh����h94t�d�9��'a��?�
���Sc[����Tj�.cLh���ɕ�$,2�Il��Yi��e�KH�^Z���i�������8�<�/��4Ɨ �"�E��p����c;Ɨ�o�\lx��\i�Q��Jp)��S���!,�rR�U',� ʹRb��HUʌ�$���� k��I���8��#��Xr��E�,�콑��#H �V"$�"�)�>EG� Laq�ȍ=����Ji���6�A�N�J�)��S���-K2�����4K���� ��3Fh����痞n�9b<�#8���vX;9D����2Ӌ2̲���o8q�� "k5�͞W�7qfp���/.K��˲��w�/�[L��ye�)��S���%O���K%� �X2T,�d�J��J�UULV �,d����X�a����x<2l�=1q���u>s��`p�5,8Y�����m ����F'&���“gm���!х(���#i�΃��
���)��.7q��X��ye��c3�h�/8�/K���/<�/K�9L��ȹ�Y�F�'e4&͛"SH��-ħ���o)�5y�����y��n����ˏ.NR+�k+"h�G��h��)��S� �$�����r���\~��+�X���"���E�z�5k k*�����:�� L�x/�a���E`̳�϶���ި��!]#�E�����@�y
�t �P"�O:D�P:yЦt��
���)��%���Xq^Wq���g�n�q������.ˮ.K�.˲�˒������#(C��Eh��Sɭ��f���BP���%i�EybX�&�y�f��SyQ�G�J��f����f�S�����N�"��<Q�YT��ՌVÅ�5q��W� ��Wa��)q��,9X����+�Å�k,
+����OT��.<2 F!�7.d�HT�0�����&�z��m hN��B`;GA��m;��ӱ��?�
����eř�%w��Y���4�\U�%7�Vh��i��rs9yrr���^\q��\�%uIɒ�^Jh�'��3yQ��E���h��D��G��Cd�ΊR��j�W8�Vq��Ҵ
���)��ܘ��)�
$���J�KVEa5tW�r�b�\Na��V�mq��� -X��b�X^]E��TLRY�&T0����q�pț� )�����4$�!!��r�'!D�O;m�v����O���;�jY�\ZyfXq^VqZi4�eIRSqNR��Q�^QqE�M�V��9�巜��r��q�׌Ѣ3�j�!a�ai����E�^F��Gy!�S�rd�tSyNSqRUyVi4�M��?�
w�rQ��2�7��i�ʀة�ɪb�LT�d�2XW,�������X0�l0<`��:\t�;,d��� e���@Ɠ*(���ě��0D�H�%z*"_l��Н�f�4[B�
���)��.)<�ٳe�]�y��i4yVTqRS��Q�\g3���Py��'��⃊�����N(�3G�M��g���KRӎP^p�jp��%�JȔ�f�4�6h���cKCc�{�|7�?�
���2�P7)PHQꉪ�A1J�b�XKU� +"����Wz�#�!�`6��&Ȉy�De���� L�`Ta
���ŵ���@T�B.q$TQD��.""w%6���h[)��ʭہO���;����{��{��l��{��Rl�)��)J2���Q���(J|�'��'���/(��(�r�ʭ�8�m7h�-KO8ym q�׌��3��/���;cSƧ�q�6F�� ��O���;�ɬ�)��).��PeO,;X��%s%ǫ�,�Å�9���
k���l�!� �2 G���|�����v���k���J �,�1X�LU�a �U�*" h��(������r��i���O���;���� 9���K��JD�\GqF��g����&6Ol��{��'8�(8��s��'8�(8�)Jr��*4k+�7y��,�.7qe np���s�̹.K��e痞_ljllx����)��S��� i90Ғ)��ޘgMɆ4�P0(��mTV +$���� 9���lZd20����l���CY���BȎ͑!��(�a\VYEU����aaV���c
M�@F�����F����y)��S�����N�Iq"Iy"H�Jl��c��%�$"2H�<���GQ H �2ȍ��Gx�$<�&<�'��'I�j$�%'�%W�eWMk5l�W��p���^s-�%��e�����y�)��S���79�܋�c�E�SDI(���P�,��YX+�Y��VM��`v�O���Y�������w>0��C�F��� �`x��q���Xr�LU���aI���MtP"����Dor.
׽��O���;��/���]yv]�����E$I����c�ȯ"8���R �����[!����G�$V�V�2[�rcɮ'<��7��S�\Q�U�<���,<�7�^p��g3��˒��S�����N�J�2��;��*(�@r���QURU0К酔�X@Y5�tYVQd!�6x"<�T>و�y�!X�g������<��ha�D6ZX7*��j��iAYF�$�E䞈“H�o������O��gp����4�.��.ˏ9qq�..<�[yn[�����i�� J�������&����c �$ �7�$Y���T�&��'�����Uh��Y�ͥ�e��eũ�eǗ[/K�)��S����_k���s��s��)� 覊�(��U#ɮ�)��c��T�O�,8d��#���!��Y2 '�́4�
��A� F!��OO2=<b������pUP�Rچ*��L �,��%�/"���(��)��S� ��%�v\qq�3�n[qĴ��i�-K2ˋ.7q��2��R̴�yMRB�� �6�r�2#dI �W���H���1���6�2�ʯ4��j�ibo7ye姖�s.KρO���;�&����H�Hnt��\0�ȋȤ���!�nP|�A��P~���MQAe kX-0�!T�c��b��dш]>��1��|4�Bb!�m����B���K
�P|�i��=1�4)Qm�)��S���cK��/��/�h�����닓����-��q-K2ˋ��Xy���w^Zyĵ7H��R Df�G �Hy"Hy*Ml�'��o)JO4yY�g�w�e�ËS�m����S�����N�������{o n��
�Iȹ'*)��*$I0�J.�>�ʩ*d�<.8Yu� �Aq���k�Xv|p|=�M�� A �'����<�720 �W;X�`yP��&Se1�%��O���;�o��68lp��58jp�/��/���_p�/"r�nr��e�̶��'-K2��'��m�^^�\ZT�b4����t�'��'��3l��I���i��j�g��Zyķ-����?�
x��(��(=�'6��������WQ#�����*tȉ"�G(1�T��a�g.1.�HL6��X��:���^8̛>"���xL>�"�-.**�Ee����j����Ƣ�S�����N�5Ƹ��S�����4K��3�h���^��חeח�^��3�^��r�q���.K�ۋs�̹.�g����k�Jh��M�n3yFRqFSyU�i���,K����ݳ��[�O���;�̏u�K*��`VXp� �WVK�a������� �
k�Vʣ�AIQʠ�b�(,b��ö@+dz|%�H���(*} �U6Q ��e�8H!0 � a� ��8�0 �r��8Fc���S�����N�rv]qv\������p���p��%�����g��\B46� ���c�Ǎ��B҅W�i���Ҳ%g��j�s��ˏ.8�.KI�(PH��Q��7l��ܷ-��\l�����..6r�
���)��s�y����6[XbY� ������r��`Ye��i�LY;X���
(�FTQqI��P���zxW`�����k8C�� ����b�] HEƚhci�$ű�P�#�F���)��S����!�gE��ێ,��o,��+��򻍜W�<�⻍��6���446F��#ZG*��4y�f�V͜f�4�LL�&<�&��( 3y�����iZV��͕�,�r����W$��S�����N��G��χ��|>> G���!������å�\t�9�;a��l�L!`v�@0;\o`t�D.:Z��`��*�P�.���G��U���p!�M#��H\��=���f���t �a�o\�#��`�a��:�����O�����J#,d��G��L:4:,KĮ�g�8�6D�W��\k5���+"i+M^Wl����ґu�F��%$G��#�IN%IO%ɨ �P�&r���4y���!r dt%�s��̺���)��S��5�`/D�Z<���}��b7� f&³-�+.�F��ŁMw.(�`Rb�����m�at �=1m%RI1QuB���8NE� ��-� �@О�C�� � Ύ�$��w��?�
w�[�H����w��iC��'�N��k5��VqY�W�h�G8�i4�8�UqVjѼ��̴��E��[��њ3�_�Ȝ��8�8��tM�����[qn[��\�]|
���)��^X�`�q��#�A@�z| G����|z|�|>1 f! �����xz�o\=\��k`;\�0�� ,����Rl&����� T�U�RY��$���մ-����'H (�Ba@�cq�p@7�  S�����N�Jy5�s�i"���Bq� n�`��!����Z*�Vy����f��J���*J���Z+�v�q8yns/!�4K��5H�*6h�W��NZyĵ8y��m��^\�O���<eQ��.WI���L�I�O�9�3ȟ
�>g�>�П F#y�i1:<#�BȚ�q1{k�������\\Y4�D�p���b��p�����P��e���4"�N�@1�z
��)��S���%8��De��!�m��Y �!���_��\.������8`;# ' *8�)��*MUqRUl�Z�<�34�I��H;' (�2����ʍ��Vy��������8�<�p���o�O���;�3��l�y@?�ʃ�LVUc&,�3#�L�� �xy#����|z|��~b��H1LBI� �A���x�/09\��z��>��D �YP:.9Xe.� t�7�� ��\6����ށ� @�@7�r�
���)�ʮ+4Xh��9H�2zde�1F ��0��G�<[�N�-E���]�Å�����-�сCl�"H����$��vP�f��eWf�G��s�y���Yy�e�K��V�O���<��A=F��B���* ���jQ�X(���R���|=<'�<���:�D� f@Q�4d�6x'/\'���#�jU�ZTn\1.��R�r��ω��DPF���E' hVB��P
n@'���O���;�RS��R�fr���)�Vhݣ�jl�9R2�����>p��������⻅x���Z�Qj.E����!HR1���C�2T����6��*<�����D���3y���NTyRT�]��?�
w��2��FT�e@�C�:��G��X�1TV1TELU�L�=Q�ࢸ����vbY�xbш|d�G��\zb !���!���2X����P`p�k�=M��6rv���{�6дv���aB6���S�����N�fٛ�� >N���5��)ĩ&Hp�$<��A��F��3X������^+<V�-�Qi��B��\��� E;#�d��$FD�����$d) �G�Fy�#d�!���)Jr�0)��S���Tz�iV�
��bR�dU�C���U��m`³k�E��b]˅��X >�M<� ��� Z1 ��>�� ����A���������X�B�@$v�C��"��V����m�f��*!r��� S�����N�1�1F���cd'��$���L�c$d��w�E�\D��9 ���C�O!�?PRPJp��A:'8Lp���З��Rx��N+6,E������� �I �!���^-E���p)��S���:L$�l(ER�*�SʹS�ȱ�ͮd�.�Õ��\t��.k�\v��k�`v��;Xp������ _<:<�L��c�&�*���ȝ�� ?&� ��8�����'m!�O���;� � N#�����"�Yp��]Y£�8��U��c����6�R �2 � �A��G�$W�$Y��Ȫ�ʊk����Cc�6�g�0ܐ��iD5�!�F�fĘ��=���W��P��?��b��S�����N�J6�=��`���•j�(��
$�6�偵j�ڽpnY�Ʉ,�� �,���6�A��v�U�X(����e�U�& i��4,�@�I%�d 1&���� '!p%o�������kOC��?�
w��,GlKlNx�تаеQ"��g
�Q⛅�."tMp��TJ�1*%�Lp��5�>'8QlTx���>����18��Gx��L���Đ�����E�
�(6)<S���-@���O�����I4�L�U5U@TUFTaP�c�V>�K�Xx�����Lk� 2�������,Y���[<=`����Y\;`ENj��
�GK����3�rK"3��C�T��Fb��Xޫo|
���)�ĤDtCtE�� n . ���_H."����+DXh.�� -O�"6��S���bk���
-��
��,�-E� ���)�7�qY�m��\��F�Ay
D�[#�2<��[p)��S����(����7*�H�g2*8���0&�@M(��vQE��ʁ�g2�,�����[<3'��y�<��xg�& ���S �����KB�G�"��S�A�S���4
h
nB�WE��4��n?�
���*K�$דd�-ę%�+�� I��SS� �T���]1�*�D�)�"!J�
���Uh+�������A���gxl�M��%��)EW��-�]h_x��� <�"H�!�� �4`S�����N� ����=��Q>�H�I4� (� *����k(�ʀZU�G�����˰;dG��r�bq���s M1����-�;\o\z� l���kΡ� )L �LmI��zEtC���O���<��r?p�-�Yp��UMF'8Mp�bC�w�� �
!D(mlEx�"KĄCR�}A �L� ����PL$��`��a>�=���~pA4���ai�� �����el3�5�"��<Ix����)��S��W�����3�xPzO���vrNG$�99A*�n�(�LEDA�*!DS}W� +��00��}]&�a�@�]���Y��1H� g��W�s�F j<vb�@��AyT*�8���ڠơҁ13��S�����N�l�g�UqQ�)E�n'���T��K���yEq
1$?DWHQPKx��&%!�&�LDH� � .#�IhPlR��� �TB�AE��Tx�!
�B���dxdpgxh���Ȅ��ؘ�
���)��*1�v��]���Zd;`#���h�v���
O���ŀ���`VXt��*�<�
T�>� ,=X�P�1L<EWB��QȢ9՜��'m��6���� F�4�;h8�v�Mt@5�3���)��S��
횢j�G���6h�l⼬��ʲ���M��P���6F���B#KcLi���n/�h�����FC�A��6���H�s�z!�F� �p�'�(rxqD#� ��Ä#a��xoR?�
���X�:A��b'�m�=�"k/<&��D��<$���,�l�L!d\<7�"�a`��k��rd�^�9Z���P���3U
�d�&j�R�B���*жhգF��ѫv�ZL��t��E0�`�O���;�������cy@���9�&r��ћ�n(�SD��7�)��*JR���-�� oR/��������#J#CƇ�.�/"]��痣4gl���ihk�N4Ɖ}�Kc[�Ǎ*��8yi2ӠS�����N� �.;\vb��paL�d0t�~�!YYy���c<=1:d=`O��,�����C�#� ��P���q3ʮ���k��Q¡Y%m� t�v�� �N��A����loBP �g�#i�(C�ӎ���?�
����+ͦl�S�0�I�y�$���Mq5��Z'8�(4QqE��(<��BQD��U���yStM*<����P�p��.��������3<gy}���SƸ�-,V��i+"W��p�
���)�ŵQTUYe�5���<�C��������4��x42�!��φ���� ���me�D6dEe�����(��b�uu�P\P��ϐ�i""Oq��DD)���:�:N�t,N��S
���)���w�l���f�4������� >N��&8��S�R[d�:Ml��>MH��=����P�f�+M�,6YyeŇ�,�O-�s.K��˲���d�n4l��]凖,J�g���O���;��T?P򠞱�����`��0.:<
f!�� F!��*������,���x?<�������i��� ̇l�l& �l�L�ꋪ��#JH��/x(N��{ÓH�F���㡬�:*vL#Y�u:�O���;�����+�k5q�����⣊n3q=B�"�p��vJ��I�d� �d�IM���ɯ&���{E'�h�ٲÊ�+�X��[�r�]2�d�2M��R@h�IVVy��%g�͞k+@���O��[QŅPSQE����+�+����K%�`@]��z���P�#�!���/1<4x1�{!��ψˠLQ<a<'��b2i�Z�I��0�� H[h69� ��9�
S�@�t) l�U;y�
���)���w��g"U�8�⬧)L����PD��k�J +�lk a�Hp�G��#D�*Kh��Y�Y=r*����� ���<d���䆉rd��3���n*8�٣ʯ+!+8�l���)��S��"㕌
��C*U�
���`A�d��ㅁyq��+�b���+��+�2L@�8�̃�0�8a���<��5\GP8�8�ʹ����ɸ\�B=��s:D�9�� �9�*t6� S�����N�Aq -��i���WSH�3�������|��l�&8�&8��S�.� q �b�'�n;�'�Op��=⡀}P gD7�$I !䗒�K�%������O3��$�Eq �)��S����� 4�\\�pҹ��ͮ"�TDV�mU����iY�u��fY�6�X]� ��U�Vj���g������DVY���
�E�� )!H.��!}C�`;P�F !T‰�@;y�?�
��� n^0�� ��.�@h����BPq��'��k�o&8��[�o%�2L��C�RS�rS�RS�ˏ�Q�'�OlT0 m�������cq F��#c+�� �����@�$9 ��S�����N��㕇�V%�K��+(���P`v�X�
�����V`x��� eq�-��Y`x�-0:\% �����`r�($�dET=U��X�ô�DW"�ۼz��m��H�P�!;@`;Z0��O���;��н���� �E� ⳅG���)�Sx��`h�����&8��S�1�2� �$��d�*M��N��o)��\k5�%*0.,�,$(�(�Tx��]��ŧ����"4KBT@n�IJ�
���)������2 FN�޸8��A�tW��`L9�J2���G�k&�x�x)��!U��Xm����W kW K�q c
�i�R]15�zB
(Q �i�����;m6�m�؅�D$4)��S��� H��jpgpepgB!4��
HEX��M��"�����%�J�O�$�H�M
�Z�[1<�!�����_p���!��!Ȓ,����!�T�'6Ql�*<��9J#+�ȑdg��x��
���)��|It�I,��O,yS�mc��\��OO(|txFGL���� ���P�2I���t<���|x:�π�x><70<`%ö�#�qs%�*} 1&y4R]04��(�M�������ai�����HP�5��?�
w�s��[�.S��U ��B��Y���Tx��\h14� �g��4E��b+ĆĘ�^%���F�X�س��|��B���E��TEE6�W��-�Nj�~0�cy �#�o"��#����O��+��a��
���C�����郪l& I�P � T�T�"�.�� pe���bو�F >��1��g��y� @��A����C���˕5� ,� i��7*t�:"� zH� �B��{�oB��\� ���?�
����Q��� ��.40�Bl��,���R �����u���B�q`�X'����(6� "��&�%��X��!�e�f�&�kĖĶ�����-E������"�b�B��� � _��?�
w��U%�Y RMT�Qd�;Qu Te@RT��ŏ����U>�&�d�',9Xu�+�㕏�;< '��@8d;>S!���2 �Y�������, K�g�ES��x��BJ,8����`!��a�8���搵��?�
w�A:&D���#DGq
����a�������� ��ئب�]�m��\p����b��@�L+.^��)� �������� ���@)�B{`�!�SxD�+� /  / M�f�D5�[$5��?�
w�gI��*`P$� �E4A�$�i� 馠E@<��@�����.�����`�mp@2��_]V�«�ՅYb�K ʊ��U�)(J� �b�VSz@nToT e *��I�-��-��
���)��+a�� ��!��"�Dpmpl���tC3�$1�"�� � p������[pZ��\����/�"� p��hxk�M��В�1�*bA��°����SH!G�6�!m�� ��V�D5<5"� p�ດ
���)��Ts�]"-Ȣ�.p��M��L��Q�P:����1c�(������L���xx��zxC!$�s>�����y���t`<\ �MQ�),:Qf)����9�a&�Y�.9WJP)��S������ ��xpNp;$ w��,�$� 9iH&8� �G� � �#�
�CA�"�g�Ɓ� jhg@��s���� � ̈́���Ѓ�„(<�-�+aQYl.</<06m�7�V�;�K�4";Ę�[ہO���;�G��'j<��� �Y�IWp\� E"� C"À~D� ]0.���VQ`�M`Yq��E� L�.L#�/���x�p���p)���.0v�0[&@�Ɂp&V@�T;PB�0��0eP˜5$v���)��S���-�Xp��Z*�S�N'�Kp��-�TI��"8Cx����0ȨZT*&����Pr\tBa�5A����H����/'�^N����h!^Ф��
�P�!�������� ��� ��)�9�@+#�����������������������������3�������w���������������������������������������?0�������������@�-(&!@
"��
�$&$ L��H" @� "�!B @�@ �D������*P)�A�!����X�d�k���<��dnВ;#a���?kmq1����)}� ��!2�JZK���b �0Q!CD@A9`(�L�*�)8F�a�FAl�l�8�p$�b�H4�!���t��/�ܾ�f������U��߾jm���?Fg��W���w��}����c���~��aXYƣt֜��6J�� AkR��DLd��'&�Q�+FN��aυ�dRDEBJQ��L` I +�(+L�ū���H�(��Q�1 Ś��J5���$IJRR���<!���1Ea�q� �$�I(��$��(�K(��,� ,��0��,��0��8‹,� 0�M,�8��4�0 0� 0�N4� 0ӻ;�@4�8�8�4�0��0�{0� 0��8Ӿ48� ;��7����N8��4��;��8�;ӻ4�8�0Ӏ4��8�@8Ӏ04����4����8�0� 0� 8Ӎ0� 4ÎӍ8�L4��8��8�8�8Ӏ4Ì0ӎ0�0ӎ0�N�M�@4�L�L,� 8Í4�4�N8Í4��N0�N8� 8�� 8� �� �4@8M8Í���;�L�7�M�;��4�{;ÿ4�7À7�N8��;�M���8�4��������;ü8�8��8��������������7ý4���� ��};��;�C�8� ��M����;��8�N�����M���;Î�� �����8� ��8|;û;��;��8�8�8�8�;�#� ;�s� 8�;ӿ ;��;�c��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������8��;ÿ;À;�}8��4�4�M8� 4�L0�L0��(�H ����������O����G9�NE*H�m$�*A�A���>Hi@�t��-��:Y�)$%�5�y�b�b�����j�<@�`��C���dy�I�)���.���:��;���������N(N� 0O�
R`�&90R�P�*�����j> c@]4* �ai�� $��нP`�0��!0c fs ���@�H ��Af`-P y`�@T�A�H@�R48� �LD�X#
U!&XH�
-�H -������p<�x���ق���" P�4�' ,�������ԁLP�`T�&��a2Uc�}d�t�3M��� �X�h9�I�_�`���#�\��L a��H ����xb���m����dtb���GF�п ����x ���|�?�<_�(<#���ax'��" �P:|�
�B���aO
u9B�|C����2���`�8��A�`�9+#/X0
�0G��>i0� �� �0"���L����X��Y@)�+ �`(�U��P�PT�R@ � �$g�$d�� x��������dK&X|!��%
��Q��:ND� �t����t�FV��IGgA��9��3����U<�Qz�4 G�I1��5�Va����4x���`l�&>h��m&sA�8��h�!��/������� f)�,%���? � �|P����!T8�q`}P�� �x"�~P��?��Ѝ�
��Ƃ �s� �  :0���"XC���p>�ań,F� �p����� �� 09��xB��@�������&R-@�(��8H!N��@I ӄ�' C���|�(t %�M�������F���I��f� STЕ&L��J���hK&d�>�� g�l�J��|��u� ����?�<�x��jT6�nP� �� �6Ķ%�?����Cr��mQ-���"Q�2Dx�p��3� AQD��Bb A�,@Q �i�2���a�Ҡ�h?�,�� �ṉlؖĵ �a����n�lKp<�x�����A�Iă��,
���t1C9�h`�gig�fs���m�6� uZ�������7T�G�&�u)3G�&h8M4uG�<MG�|��&.4x�$lj�ɏ�������ha�$ 2�E8����~���Ej,� @�,A�1 D%"$[Űơ�"�c��Df"�V"�ơ�-�b؉"�A�1� XődX���+Q!(�he4H& 1)`x�����������A�Q�ģ�>X�ua���QՆ��k�lk 7 n$O ��5TH�IUPЪ��MPسCZ� �� f�CI��(Ӛ �%45�����ɣ���������T��>a�>���(�W�j,�"Ȯ�S�;Q��G#�N��<O����"v8��8����N��C���@�"Ȯ�Z���>a�=a�=a�U�����:s�� t��8�����ghg`zgm��m ��w���구7*֪
j�����5MP�4��ST8��i��cI�i�ɄA��4��`x�������*���=���*b�8Ƙ�aFc1��f3�F�q��n5Q�0�$�Y%��Tf5�F�Q��j5cJ5c��iGNh�C��{b�����0��-gb;6�m�[�[�c�c�{��◊8���'�P����+QUa��V��Ś,Vh�Z���V�D��i�-4� ���x�������0ȩ)&JIF$�b0��Œ����d�&)lɓ �
BBBBA��$&L�2c2Z���(�eFc��I1�)&JJJJI`x������� �v�vcgA��嶋e7Cl.���縲����ΫU6�j��STک:�55A��ɩ�=SG��I��yI���M4Ձ������&FI�R*JJJFA�˗.\�r�)�[2d�2d��!!1����$�&L�1�-K��e˗.\��BDх%%%$�Y%#����KlQlP�g�Ռ���X�lf���U�Վ;�9�5�QŨޣJ�KQ�Q��V�
�ej4��J�'UQI���?�<�x���f2�J�-JeK��2�˗.\�1Ke�&L�2ALd���1H3&L�̙-KR��r�˗-�)KeJR�R�)�
F���0s��m����v��Vϳ���Ŗ���~���n��U��,Su6,SU��������U5D ��j���������YR�J�*T�r��e˗.b�.d�.U SM SM4QL�.c2Z�.\�r��岥)r�J�*T�V���/�j�7#VI�'c�62�c�l��r�g!Y���+S.g!�V0�UQ��µV� RKRKR*Ԓ����������*U,�*T�R�J��˗KKCER��SE�)��-�EQE��JT�r�J�*T�R�JiR�x������L�3���6�v��hm���m���N��"U�QSk6����Y��j��ST��&���5G�Ձ������e)R�J�*T�-��'h��(��(���h��i��)h��(��(���'S�T�R�J�*T�R�x������E�&���M��˕����_-��9��^�jf���-j]�UR֥�LZ�URJ�IY�V�V�<�x���M4�R�J���P�T*
�B�v�(TQE4P�;<��(TQEQE N���������eJ���M0<�x���������cw%u��|a�K����J���
��bn��
�UQ�U5UE
i����?�<_ҥJ�vvy�T*�����QB�v�'�������y��u:���(�����������ii����0O+�����O-�]7*�]=���֚�J�R�)jR�=+T�KUR
��������<��=
�B�y�(T)���V��:�y��y��y�n���y�TQ:�P���<�u:�N��x?�<�x�`�N8�8�q� ���i"��8�0��@��9$
�#��r�4r�b e444��5��&�c���d�yI�|#���j�^/Q5���b�Dؾ�y�$M�࣪�r���������C��<Lf� � ���Hh)B�x*G°�V�*ɂ�Ю4;�`|��n.�����B�зao �/X\0�/Z��� -$ip�U�'�h�K ��*0Y Ȁ<P%�0�E$$�t��B��?�9�9 !(� �������6�JE�$@O "@�,|�)KAC���Ҁ�0L"A�t�s��
MHe��<�b� J4 �I��4`t �f!3 �hL�`S��$�(7��x��#�F� �h^H|��BhA�TA�&
�x:4:�p]�����K �5��u��a�)���&
��X����\pX¸ЯP�Lq�[����Z�8a�x@A�e�dp�HW���0��0]� ���t/��q�t��;��#̰Zl,Xw��;�V&����� ����P���Bh��p<�x���H�)f�|F6��˞3;;K"���gb�p+���*�1l\�X�TJ�;5AƦ�I���JM@�Rf��>��Rj&��e&�b�����\<�x�v���/�\���<dIEJ*��ꇪ(|h~�B4CQj��d&P{Q"$�B��iP� �����6C\60�� �p�ă������ �"ű�,X�l>���J�TR�H:.`L�y�������!���7�ij�arg&p�9�G4��9ɜ9�aXE5�_��;�:�&�sT"֡��Y�i�k4948�A0�i�NLK5�i�i��4^h&�����������4F�CDx����� �"$D�g�xg�uN�<�E8��c�|qS� R���)�b��)b��*P��Y���E&I�%C<3�;bL30��Xeb<G�F#Dh��x�������q�r�"���=�;;K< ���kgx2��G�2Uj�U�`<*�55@�URj�����MD�5Gԙ��4��Ɠ4f�4x��p<�x����3�B8���*b��Ƙڍ������G"x�'b��)QLS�,U(�*b�ELU��)�b�(�"�'��x�r7���q�ډ�(~h�h�hc4F�G������#6ŭ� ؄�Cv!��Dv"qm�+�[v,����ŕ�
� q
�-���Qj"-DEf�j� ��!���j"��eRk��������c1��j5�F�q�ڎF�Q�I�ddT�######%%%%##$����Ȳ2*IFeF�n7���5�1��j3��c0<�x���� ����)����j�H�v��wp��������uXe����Ҫ���*j�TV��������M4Ձ�������aFc1���$�A�1L�2c ���R
AHHHLd&3&K�.\ɓɊBBA�������H3&3&LRRJ3��ʌ�������=n)���7X�j��6��7�n0ܕ�\�%�r\�T����5X��r�7���mj8������`x�������c-Je˗-������d�l�*��i�R�T�T��M2�J��M2�i�T�\ɓ&KS��K��˗.\�?�<`X�;=-��ŷ;ts�������w�(k]V�UPx�M�ڪ�B�UMURj�j���MRjj�)�j����������R�2�˗)�����R�hi��i��Zi�KM2�SM*U2�U4�M4�ШT���*�R�˗-�������/�%�\�3���r��E��"�<���H�B�C�V�5!r
�ũ�S�r5��������/�4��4QEQE *�J�P��M4�T�L�KL�*T��U4�L��hT�B��ZZZ(TQEQB�J�������5wq���w�r��]�k��w�:���Q�UUX���TmUj�4��X�kUUZ���������QEQJ��)T�U*�J�R�i���'�y��y��y��T*ii�P�iiiiiiiih��(hhhhp<�x���-�o/�V[�+3�����n������������-s1s�jbԾZԵ�kX?�<�x���(TQEQCE�U*�����y��u<��<��<��<��jz)h�P���(���(��?�<�x�
�v�n����{�w��G��UW�k�UU��Uj��kU�j���5Ujl٫�����N�EQEQ;<���SΧ���y��y��{S�<��=��O;<��=�(��(��(��������W-�wM��ZkMi�5�����֛��t��t��]*�WJ�Ei���-j]T�k�����P�S�QD��ݳ�g��{����y��y���{S�;j{Sڞ����;=�j���(��u��������G�g��������+�W^_Z�Z��ŭjb���*�R*���U]V���/�S�Ol����:�uvέ�����绻������v����S��g�;j�mNڹ�TQC�������n��Z+GGGGGGG?=�������U?F���UTj�еE�J�j�<�x���l���\���]���{��������������n���W;j�m\����X?�<�x��frH9���"�9�(�Ȝ��r�q� e��(,��ÖrГ�t�'B�s�Y�V>h��I��Չ����2=�I��L��t���<Ǣ��#�<1z��������2`$�
RaRL+ �lA�G����x�.�d��жP�P�`�4.M ��_s��.�u ��.����@ ��`X+JAAPX E��pP�E�L�� H�I )`��� ��@ @ (����8t@s@r@A� J��?�<_��X�@� ��ba��(ԁP�@�(ԁ�i)� X��&��G&�(�k� H7�`�h`P���R� �J4 �,| 1����&D|q�$�0�a����f�& ��D��<`�/lj��ab&���T:'
Q4l]�����H��`@3&"�L��x. �va�Xu4; ���r
PO
B��A8X&�(XK���h�����8� y0H(��R.�^ Qx%��l^���x*����l����ë�Ƅ���' ��.X%� 2�"T�?�<_����"����.��ǁ l�p .,�ѹ�;�pd��?u�!V:��˪����U�
��������լ\��*j����><>Ltt~���/� Xo$%��3Q�Q��mF�n7c���N�v(QDQE1LR�1TU������)�b�(QDR�<N�#�q�1�7�F�Q��i����/���L_�����~��Y���Av!V!�C�Dv-�[qmb׈��"qQ��m��j-��U�E���D%j!-Dj,V�
�����DՁ�������Q�c1�ҍ(�j4��i����7��Y&A�f3&K�.\ɓ&2�˗2A�������iG�Q���F�*4�Tf4�X�aF x������V��wv�P����P[�����_�o������V��U��)j�UV��
j���jj����?�<_�TbJE�fKeRʦT�K*�T�R�KR�r�˗1K�.\�sr�˗)Ke)l�R�JeJeS)�J��) $�����������7%�7#��U���%Y'��nG��9C��j�y-I\���I+R<�Ԋ䖣���������4�i��i������*YT��EQE
�(��(��(��(��(��i�J�)�L�SJ�SM4�L�?�<`w�|o��|k��1�g�U�1����U�X�j��u]bz��������������*��i���D��Ч��蝞����y��y��<��<�Q=OE �O:���z(�SM4�L�?�<` ���UeU�YU���]=Mi���i���*��]5T�JW)\�r��\��W�����<���<��B��<��m��<�wws�ۻ��睻���O:���z��y��vx?�<�x�E�{w}�E���?��-�z��޽uZ�UU��ְ�U���Z����������<��<�:�����m���������ݩ��睻�;wj�y��{Sڞ���0�.���������s�s���j~��jzιꧭ�����?�<_Χ������ή�Ww:�۹����{��S�ڞ��N���ڻ���S���������7}?t�|��u�O}?��=yJ��*�)W����5�z����0-�����ή�Wwm��ۻ�������S�v��v�v�v�����x������~~~~}����������}��}�~���W=T�
���������j�������������������]ڻ�wwwwww�������߻�_������W����k���_U��j�����0On���������������ww������������������~�����������|����꯾����=��<�?�<`�ڻ��w������������ݿ�ݿw���Wwp<�x����O����?����?���?�\�Y��}|�zj�`x����������ڻ�Wj���wwwwwwwo���W����w�����w�u����$O����}��}����������~��������X�������v��`{�������?����?��a!�
$��(��,�/��,��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������� (�̀����,6A�������� I���I �
II �� �Y����`�?���a!!!#�(�F�K�lJ�#�1�c�"�X�EJB�1�(�1�H����0m�m��V+ ������p�r��I���́�@̃���?�� $c�1F��ı*Ս��c�1���ZEb����$cŒc���pX�@������ٰ?���O���I� ��&L� .L�)&I�^`�?�� c�1�m�b[ı-���c�+ci��Kim�(�1�����> ��66<xe ����p���1&$��,r9!� �9�����5ƭ�m�Ķؖ%�-��1ZElV+-���m�c�����=p�V�wl��/���,�$�d�0Y R`����d�2L����o��[im��mD�,J���m����b��m��m�(ŀ��������.<V66�����H��<N9�#H�9�������m��m�-�,Kb[�b�+b�[m�+m�.\�������� �v�`u�}��<�92H9�s��H9�y������m���m�Ķ��}�����n[n[m�����<x�f.:<Z<tV�������&G�������q:L���8��ۭ��m��o���m����ն�m�`�?���[\x�5�|��L���$� `��)2L�L�Y0������m���[m����m���m��m�n[W0�����oltx�\z��{Ƕ��{�G�D���t��i?�����m���[n��Km����m��m�j�X���p���`�Pߏ<<��?×#'���'0�d��fl����o��5���[u����m������նڶ�m����3V<f.:<Z=�f������ox�$�I#Hؙr%�����m5��m����m�[my��[r�[j�X���p�ocP�������?��?�x $��&�Ad��d���Mi���n�n�_���~��_rەm\�l���8�Ǽtf���~�����O�t��I"t��L�����i����u�۾�����-nZ�W-\�?���?a���^�����~H�1�K�fxI,��rBI2`�?����֔�����wK������������e\����u���{ٽ�ٽ�[ӧKr�ܹ/I#i&����Miu�5���_���+�yk�����r������\{�~6�����_�y���<I$�I&H &I L�R`�?��6��KQ-[im����m����{r�*X�b�������f���c��ͱ���<r��H�)�d������d���Q-D��K�u.���{m��m�me�|�ZX�m���������y�������<� � <�rL ��$�?������Z���R���[m��m��-�[��K,T�����a�Ͷ���c6Ǽf<x��l�,Ĥi{7�&Ē9������m.��Ժ�]Kom��om�k.^��-�Rŀ���� _����;��?��y'3�3��99���'3'$����o��.���Զ�[me���լ���o�*`�?���������Ǽf���Kx咝;ĥ�ܲ^6���z^�R�^�]Kom�m��V���e��k�����6?���y������ ٌ�0�s�I�f���]����MKK��m�����j�^�k��?��� ���{�{�3~������JD�2�Jw/N����������������m���������_/����{{��� �����?�L���l� �I̜&`�?��=/K��R���9{��Wk/��?��� �{�������{���/6K%2���)ܦ����z^������_������YY{]��V��� o�~?��������$ȟ�2c������Mޗ���Է���m�������+��+?����{�3{�������[�N��{��ɀ�����7u/{������/�����������7����;��?�������g<�<�L��&|�����57u/�������������0�������{�������oܷ���2��)����ޛ�����K��m�������VW`�?�����������4�����$�c<Ĝ�?��� �����o����������W{畀�����o{���7�7�K�-��s�)��w����n�驿����������������`�?����������������0��39�<����p.�w�����m��m����k����`�?��=����ٽ�2#{��4��-˘���o�w������ �����������7����{������~o�>�����N�?��� /������n���������-`�?�������{���ޗ��O����s����p��������������������������?�����qϳ9��s�`�?�����������������������8G������������r����ܹ�������w�w��-��������X���p�������������~ny~~s?�����/�������m����-�����p������ʓ?�K�zX���rN��_���
�������8���������?���xfs�������p�����`h����?�����������������K����?��� ����M�����k�����/���������{������?{���s�6���c������������������㟿�����������Ͱ�������n� �������������������?����?ɘ���o���_��@���V���;=��`�m������*����C��������������|��������`�?��&���!n�`FW�`�?��3��2'��4�����g���������������+����+��

73
Assets/LowEndMobilePipeline/TestScenes/LDRenderPipelineBasicScene/ReflectionProbe-0.exr.meta


fileFormatVersion: 2
guid: d270136facda2a745b3c14bddd257f04
timeCreated: 1488962999
licenseType: Pro
TextureImporter:
fileIDToRecycleName:
8900000: generatedCubemap
serializedVersion: 4
mipmaps:
mipMapMode: 0
enableMipMap: 1
sRGBTexture: 1
linearTexture: 0
fadeOut: 0
borderMipMap: 0
mipMapFadeDistanceStart: 1
mipMapFadeDistanceEnd: 3
bumpmap:
convertToNormalMap: 0
externalNormalMap: 0
heightScale: 0.25
normalMapFilter: 0
isReadable: 0
grayScaleToAlpha: 0
generateCubemap: 6
cubemapConvolution: 1
seamlessCubemap: 1
textureFormat: 1
maxTextureSize: 2048
textureSettings:
serializedVersion: 2
filterMode: 2
aniso: 0
mipBias: 0
wrapU: 1
wrapV: 1
wrapW: 1
nPOTScale: 1
lightmap: 0
compressionQuality: 50
spriteMode: 0
spriteExtrude: 1
spriteMeshType: 1
alignment: 0
spritePivot: {x: 0.5, y: 0.5}
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
spritePixelsToUnits: 100
alphaUsage: 1
alphaIsTransparency: 0
spriteTessellationDetail: -1
textureType: 0
textureShape: 2
maxTextureSizeSet: 0
compressionQualitySet: 0
textureFormatSet: 0
platformSettings:
- buildTarget: DefaultTexturePlatform
maxTextureSize: 2048
textureFormat: -1
textureCompression: 1
compressionQuality: 100
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
spriteSheet:
serializedVersion: 2
sprites: []
outline: []
physicsShape: []
spritePackingTag:
userData:
assetBundleName:
assetBundleVariant:

1001
Assets/LowEndMobilePipeline/TestScenes/LDRenderPipelineVikingVillage.unity
文件差异内容过多而无法显示
查看文件

9
Assets/LowEndMobilePipeline/TestScenes/Materials/LDRenderPipeMaterials.meta


fileFormatVersion: 2
guid: 308e8e53de09484409ac0dffaaf5d276
folderAsset: yes
timeCreated: 1487753937
licenseType: Pro
DefaultImporter:
userData:
assetBundleName:
assetBundleVariant:

9
Assets/LowEndMobilePipeline/TestScenes/Materials/LegacyMobileMaterials.meta


fileFormatVersion: 2
guid: 02b87bca4d6e8f1499bc89202d5cc9ff
folderAsset: yes
timeCreated: 1487753991
licenseType: Pro
DefaultImporter:
userData:
assetBundleName:
assetBundleVariant:

77
Assets/LowEndMobilePipeline/TestScenes/Materials/LegacyMobileMaterials/LegacyMobileAlpha.mat


%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: LegacyMobileAlpha
m_Shader: {fileID: 33, guid: 0000000000000000f000000000000000, type: 0}
m_ShaderKeywords:
m_LightmapFlags: 4
m_EnableInstancingVariants: 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}
- _DetailAlbedoMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _DetailMask:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _DetailNormalMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _EmissionMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _MainTex:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _MetallicGlossMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _OcclusionMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _ParallaxMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
m_Floats:
- _BumpScale: 1
- _Cutoff: 0.5
- _DetailNormalMapScale: 1
- _DstBlend: 0
- _GlossMapScale: 1
- _Glossiness: 0.5
- _GlossyReflections: 1
- _Metallic: 0
- _Mode: 0
- _OcclusionStrength: 1
- _Parallax: 0.02
- _Shininess: 0.078125
- _SmoothnessTextureChannel: 0
- _SpecularHighlights: 1
- _SrcBlend: 1
- _UVSec: 0
- _ZWrite: 1
m_Colors:
- _Color: {r: 1, g: 1, b: 1, a: 1}
- _EmissionColor: {r: 0, g: 0, b: 0, a: 1}
- _SpecColor: {r: 0.5, g: 0.5, b: 0.5, a: 0}

9
Assets/LowEndMobilePipeline/TestScenes/Materials/LegacyMobileMaterials/LegacyMobileAlpha.mat.meta


fileFormatVersion: 2
guid: 7d3b639840adb124384d0527c0515c18
timeCreated: 1487764332
licenseType: Pro
NativeFormatImporter:
mainObjectFileID: 2100000
userData:
assetBundleName:
assetBundleVariant:

81
Assets/LowEndMobilePipeline/TestScenes/Materials/LegacyMobileMaterials/LegacyMobileColors.mat


%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: LegacyMobileColors
m_Shader: {fileID: 4800000, guid: 8d2bb70cbf9db8d4da26e15b26e74248, type: 3}
m_ShaderKeywords: _EMISSION _NORMALMAP
m_LightmapFlags: 1
m_EnableInstancingVariants: 0
m_CustomRenderQueue: -1
stringTagMap: {}
disabledShaderPasses: []
m_SavedProperties:
serializedVersion: 3
m_TexEnvs:
- _BumpMap:
m_Texture: {fileID: 2800000, guid: 3f3b8bdf3ccd30c4fb97b62bd26ef1f6, type: 3}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _DetailAlbedoMap:
m_Texture: {fileID: 0}
m_Scale: {x: 10, y: 10}
m_Offset: {x: 0, y: 0}
- _DetailMask:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _DetailNormalMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _EmissionMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _MainTex:
m_Texture: {fileID: 2800000, guid: 618126695341ad844ac048b062fd2688, type: 3}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _MetallicGlossMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _OcclusionMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _ParallaxMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _SpecGlossMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
m_Floats:
- _BumpScale: 1
- _Cutoff: 0.5
- _DetailNormalMapScale: 1
- _DstBlend: 0
- _GlossMapScale: 1
- _Glossiness: 0.078125
- _GlossyReflections: 1
- _Metallic: 0
- _Mode: 0
- _OcclusionStrength: 1
- _Parallax: 0.02
- _Shininess: 0.078125
- _SmoothnessTextureChannel: 0
- _SpecularHighlights: 1
- _SrcBlend: 1
- _UVSec: 0
- _ZWrite: 1
m_Colors:
- _Color: {r: 1, g: 1, b: 1, a: 1}
- _EmissionColor: {r: 0, g: 0, b: 0, a: 1}
- _SpecColor: {r: 0.21323532, g: 0.21323532, b: 0.21323532, a: 1}

9
Assets/LowEndMobilePipeline/TestScenes/Materials/LegacyMobileMaterials/LegacyMobileColors.mat.meta


fileFormatVersion: 2
guid: ed6bedab6efb5394bb6e1ab693888835
timeCreated: 1481626510
licenseType: Pro
NativeFormatImporter:
userData:
assetBundleName:
assetBundleVariant:

81
Assets/LowEndMobilePipeline/TestScenes/Materials/LegacyMobileMaterials/LegacyMobileGlass.mat


%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: LegacyMobileGlass
m_Shader: {fileID: 4800000, guid: 8d2bb70cbf9db8d4da26e15b26e74248, type: 3}
m_ShaderKeywords: _ALPHABLEND_ON _EMISSION _METALLICGLOSSMAP
m_LightmapFlags: 1
m_EnableInstancingVariants: 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}
- _DetailAlbedoMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _DetailMask:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _DetailNormalMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _EmissionMap:
m_Texture: {fileID: 0}
m_Scale: {x: 2, y: 2}
m_Offset: {x: 0, y: 0}
- _MainTex:
m_Texture: {fileID: 2800000, guid: 894ecea3849c1417180f79a5ca555a6a, type: 3}
m_Scale: {x: 2, y: 2}
m_Offset: {x: 0, y: 0}
- _MetallicGlossMap:
m_Texture: {fileID: 2800000, guid: 894ecea3849c1417180f79a5ca555a6a, type: 3}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _OcclusionMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _ParallaxMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _SpecGlossMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
m_Floats:
- _BumpScale: 1
- _Cutoff: 0.5
- _DetailNormalMapScale: 1
- _DstBlend: 10
- _GlossMapScale: 1
- _Glossiness: 0.078125
- _GlossyReflections: 1
- _Metallic: 0
- _Mode: 2
- _OcclusionStrength: 1
- _Parallax: 0.02
- _Shininess: 0.078125
- _SmoothnessTextureChannel: 0
- _SpecularHighlights: 1
- _SrcBlend: 5
- _UVSec: 0
- _ZWrite: 0
m_Colors:
- _Color: {r: 1, g: 1, b: 1, a: 1}
- _EmissionColor: {r: 0, g: 0, b: 0, a: 1}
- _SpecColor: {r: 0.19999996, g: 0.19999996, b: 0.19999996, a: 1}

9
Assets/LowEndMobilePipeline/TestScenes/Materials/LegacyMobileMaterials/LegacyMobileGlass.mat.meta


fileFormatVersion: 2
guid: ea9fe2235ce15b34bb11390a91702005
timeCreated: 1478093906
licenseType: Pro
NativeFormatImporter:
userData:
assetBundleName:
assetBundleVariant:

9
Assets/LowEndMobilePipeline/TestScenes/Materials/LegacyMobileMaterials/LegacyMobilePlane.mat.meta


fileFormatVersion: 2
guid: 902a730ec9379894b8aecdd235c7bf86
timeCreated: 1481626510
licenseType: Pro
NativeFormatImporter:
userData:
assetBundleName:
assetBundleVariant:

81
Assets/LowEndMobilePipeline/TestScenes/Materials/LegacyMobileMaterials/LegacyMobileSphere.mat


%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: LegacyMobileSphere
m_Shader: {fileID: 4800000, guid: 8d2bb70cbf9db8d4da26e15b26e74248, type: 3}
m_ShaderKeywords:
m_LightmapFlags: 4
m_EnableInstancingVariants: 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}
- _DetailAlbedoMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _DetailMask:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _DetailNormalMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _EmissionMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _MainTex:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _MetallicGlossMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _OcclusionMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _ParallaxMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _SpecGlossMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
m_Floats:
- _BumpScale: 1
- _Cutoff: 0.5
- _DetailNormalMapScale: 1
- _DstBlend: 0
- _GlossMapScale: 0.186
- _Glossiness: 0.078125
- _GlossyReflections: 1
- _Metallic: 0
- _Mode: 0
- _OcclusionStrength: 1
- _Parallax: 0.02
- _Shininess: 0.078125
- _SmoothnessTextureChannel: 0
- _SpecularHighlights: 1
- _SrcBlend: 1
- _UVSec: 0
- _ZWrite: 1
m_Colors:
- _Color: {r: 1, g: 1, b: 1, a: 1}
- _EmissionColor: {r: 0, g: 0, b: 0, a: 1}
- _SpecColor: {r: 0.97058815, g: 0.97058815, b: 0.97058815, a: 1}

9
Assets/LowEndMobilePipeline/TestScenes/Materials/LegacyMobileMaterials/LegacyMobileSphere.mat.meta


fileFormatVersion: 2
guid: d2b12cb90e76a254896e874c91509614
timeCreated: 1487679711
licenseType: Pro
NativeFormatImporter:
mainObjectFileID: 2100000
userData:
assetBundleName:
assetBundleVariant:

84
Assets/LowEndMobilePipeline/TestScenes/Materials/LegacyMobileMaterials/LegacyMobilePlane.mat


%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: LegacyMobilePlane
m_Shader: {fileID: 4800000, guid: 8d2bb70cbf9db8d4da26e15b26e74248, type: 3}
m_ShaderKeywords: _EMISSION _GLOSSINESS_FROM_BASE_ALPHA _NORMALMAP _SPECULAR_COLOR
m_LightmapFlags: 1
m_EnableInstancingVariants: 0
m_CustomRenderQueue: -1
stringTagMap: {}
disabledShaderPasses: []
m_SavedProperties:
serializedVersion: 3
m_TexEnvs:
- _BumpMap:
m_Texture: {fileID: 2800000, guid: d63435d934a30fd439a005c25fa542f0, type: 3}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _DetailAlbedoMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _DetailMask:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _DetailNormalMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _EmissionMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _MainTex:
m_Texture: {fileID: 2800000, guid: 70218f73fcdf828428151dfdd3104a8f, type: 3}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _MetallicGlossMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _OcclusionMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _ParallaxMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _SpecGlossMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
m_Floats:
- _BumpScale: 1
- _Cutoff: 0.5
- _DetailNormalMapScale: 1
- _DstBlend: 0
- _GlossMapScale: 1
- _Glossiness: 0.078125
- _GlossinessSource: 0
- _GlossyReflections: 1
- _Metallic: 0
- _Mode: 0
- _OcclusionStrength: 1
- _Parallax: 0.02
- _Shininess: 0.078125
- _SmoothnessTextureChannel: 0
- _SpecSource: 0
- _SpecularHighlights: 1
- _SpecularStrength: 200
- _SrcBlend: 1
- _UVSec: 0
- _ZWrite: 1
m_Colors:
- _Color: {r: 1, g: 1, b: 1, a: 1}
- _EmissionColor: {r: 0, g: 0, b: 0, a: 1}
- _SpecColor: {r: 0.19999997, g: 0.19999997, b: 0.19999997, a: 1}

9
Assets/LowEndMobilePipeline/TestScenes/Materials/LDRenderPipeMaterials/LDSpecularSphere0.mat.meta


fileFormatVersion: 2
guid: bded62b791643214d8d29703a7813d34
timeCreated: 1487679711
licenseType: Pro
NativeFormatImporter:
mainObjectFileID: 2100000
userData:
assetBundleName:
assetBundleVariant:

8
Assets/LowEndMobilePipeline/TestScenes/Materials/LDRenderPipeMaterials/MobileColors.mat.meta


fileFormatVersion: 2
guid: 1b54f485d9718e64dbff824f0defbb92
timeCreated: 1481626510
licenseType: Pro
NativeFormatImporter:
userData:
assetBundleName:
assetBundleVariant:

8
Assets/LowEndMobilePipeline/TestScenes/Materials/LDRenderPipeMaterials/MobileColorsTile.mat.meta


fileFormatVersion: 2
guid: 3647f71343b206c4ca176689c2261a85
timeCreated: 1481626510
licenseType: Pro
NativeFormatImporter:
userData:
assetBundleName:
assetBundleVariant:

85
Assets/LowEndMobilePipeline/TestScenes/Materials/LDRenderPipeMaterials/MobileGlass.mat


%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: MobileGlass
m_Shader: {fileID: 4800000, guid: 8d2bb70cbf9db8d4da26e15b26e74248, type: 3}
m_ShaderKeywords: _ALPHABLEND_ON _EMISSION _GLOSSINESS_FROM_BASE_ALPHA _METALLICGLOSSMAP
_SPECULAR_COLOR
m_LightmapFlags: 1
m_EnableInstancingVariants: 0
m_CustomRenderQueue: 3000
stringTagMap:
RenderType: Transparent
disabledShaderPasses: []
m_SavedProperties:
serializedVersion: 3
m_TexEnvs:
- _BumpMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _DetailAlbedoMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _DetailMask:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _DetailNormalMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _EmissionMap:
m_Texture: {fileID: 0}
m_Scale: {x: 2, y: 2}
m_Offset: {x: 0, y: 0}
- _MainTex:
m_Texture: {fileID: 2800000, guid: 894ecea3849c1417180f79a5ca555a6a, type: 3}
m_Scale: {x: 2, y: 2}
m_Offset: {x: 0, y: 0}
- _MetallicGlossMap:
m_Texture: {fileID: 2800000, guid: 894ecea3849c1417180f79a5ca555a6a, type: 3}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _OcclusionMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _ParallaxMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _SpecGlossMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
m_Floats:
- _BumpScale: 1
- _Cutoff: 0.5
- _DetailNormalMapScale: 1
- _DstBlend: 10
- _GlossMapScale: 1
- _Glossiness: 0.474
- _GlossinessSource: 0
- _GlossyReflections: 1
- _Metallic: 0
- _Mode: 2
- _OcclusionStrength: 1
- _Parallax: 0.02
- _SmoothnessTextureChannel: 0
- _SpecSource: 0
- _SpecularHighlights: 1
- _SpecularStrength: 200
- _SrcBlend: 5
- _UVSec: 0
- _ZWrite: 0
m_Colors:
- _Color: {r: 1, g: 1, b: 1, a: 1}
- _EmissionColor: {r: 0, g: 0, b: 0, a: 1}
- _SpecColor: {r: 0.19999996, g: 0.19999996, b: 0.19999996, a: 1}

8
Assets/LowEndMobilePipeline/TestScenes/Materials/LDRenderPipeMaterials/MobileGlass.mat.meta


fileFormatVersion: 2
guid: 2cbb16400afc3434f82480d3d0491ae6
timeCreated: 1478093906
licenseType: Pro
NativeFormatImporter:
userData:
assetBundleName:
assetBundleVariant:

8
Assets/LowEndMobilePipeline/TestScenes/Materials/LDRenderPipeMaterials/MobilePlane.mat.meta


fileFormatVersion: 2
guid: a200b6b244ab748488dcdcfb03f2937e
timeCreated: 1481626510
licenseType: Pro
NativeFormatImporter:
userData:
assetBundleName:
assetBundleVariant:

83
Assets/LowEndMobilePipeline/TestScenes/Materials/LDRenderPipeMaterials/LDSpecularSphere0.mat


%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: LDSpecularSphere0
m_Shader: {fileID: 4800000, guid: 8d2bb70cbf9db8d4da26e15b26e74248, type: 3}
m_ShaderKeywords: _GLOSSINESS_FROM_BASE_ALPHA _SPECULAR_COLOR
m_LightmapFlags: 4
m_EnableInstancingVariants: 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}
- _DetailAlbedoMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _DetailMask:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _DetailNormalMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _EmissionMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _MainTex:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _MetallicGlossMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _OcclusionMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _ParallaxMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _SpecGlossMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
m_Floats:
- _BumpScale: 1
- _Cutoff: 0.5
- _DetailNormalMapScale: 1
- _DstBlend: 0
- _GlossMapScale: 0.186
- _Glossiness: 1
- _GlossinessSource: 0
- _GlossyReflections: 1
- _Metallic: 0
- _Mode: 0
- _OcclusionStrength: 1
- _Parallax: 0.02
- _SmoothnessTextureChannel: 0
- _SpecSource: 0
- _SpecularHighlights: 1
- _SpecularStrength: 200
- _SrcBlend: 1
- _UVSec: 0
- _ZWrite: 1
m_Colors:
- _Color: {r: 1, g: 1, b: 1, a: 1}
- _EmissionColor: {r: 0, g: 0, b: 0, a: 1}
- _SpecColor: {r: 0.97058815, g: 0.97058815, b: 0.97058815, a: 1}

83
Assets/LowEndMobilePipeline/TestScenes/Materials/LDRenderPipeMaterials/MobileColors.mat


%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: MobileColors
m_Shader: {fileID: 4800000, guid: 8d2bb70cbf9db8d4da26e15b26e74248, type: 3}
m_ShaderKeywords: _EMISSION _GLOSSINESS_FROM_BASE_ALPHA _NORMALMAP _SPECULAR_COLOR
m_LightmapFlags: 1
m_EnableInstancingVariants: 0
m_CustomRenderQueue: -1
stringTagMap: {}
disabledShaderPasses: []
m_SavedProperties:
serializedVersion: 3
m_TexEnvs:
- _BumpMap:
m_Texture: {fileID: 2800000, guid: 3f3b8bdf3ccd30c4fb97b62bd26ef1f6, type: 3}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _DetailAlbedoMap:
m_Texture: {fileID: 0}
m_Scale: {x: 10, y: 10}
m_Offset: {x: 0, y: 0}
- _DetailMask:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _DetailNormalMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _EmissionMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _MainTex:
m_Texture: {fileID: 2800000, guid: 618126695341ad844ac048b062fd2688, type: 3}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _MetallicGlossMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _OcclusionMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _ParallaxMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _SpecGlossMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
m_Floats:
- _BumpScale: 1
- _Cutoff: 0.5
- _DetailNormalMapScale: 1
- _DstBlend: 0
- _GlossMapScale: 1
- _Glossiness: 0.107
- _GlossinessSource: 0
- _GlossyReflections: 1
- _Metallic: 0
- _Mode: 0
- _OcclusionStrength: 1
- _Parallax: 0.02
- _SmoothnessTextureChannel: 0
- _SpecSource: 0
- _SpecularHighlights: 1
- _SpecularStrength: 240
- _SrcBlend: 1
- _UVSec: 0
- _ZWrite: 1
m_Colors:
- _Color: {r: 1, g: 1, b: 1, a: 1}
- _EmissionColor: {r: 0, g: 0, b: 0, a: 1}
- _SpecColor: {r: 1, g: 1, b: 1, a: 1}

83
Assets/LowEndMobilePipeline/TestScenes/Materials/LDRenderPipeMaterials/MobilePlane.mat


%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: MobilePlane
m_Shader: {fileID: 4800000, guid: 8d2bb70cbf9db8d4da26e15b26e74248, type: 3}
m_ShaderKeywords: _EMISSION _GLOSSINESS_FROM_BASE_ALPHA _NORMALMAP _SHARED_SPECULAR_DIFFUSE
m_LightmapFlags: 1
m_EnableInstancingVariants: 0
m_CustomRenderQueue: -1
stringTagMap: {}
disabledShaderPasses: []
m_SavedProperties:
serializedVersion: 3
m_TexEnvs:
- _BumpMap:
m_Texture: {fileID: 2800000, guid: d63435d934a30fd439a005c25fa542f0, type: 3}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _DetailAlbedoMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _DetailMask:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _DetailNormalMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _EmissionMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _MainTex:
m_Texture: {fileID: 2800000, guid: 70218f73fcdf828428151dfdd3104a8f, type: 3}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _MetallicGlossMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _OcclusionMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _ParallaxMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _SpecGlossMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
m_Floats:
- _BumpScale: 1
- _Cutoff: 0.5
- _DetailNormalMapScale: 1
- _DstBlend: 0
- _GlossMapScale: 1
- _Glossiness: 0.474
- _GlossinessSource: 0
- _GlossyReflections: 1
- _Metallic: 0
- _Mode: 0
- _OcclusionStrength: 1
- _Parallax: 0.02
- _SmoothnessTextureChannel: 0
- _SpecSource: 1
- _SpecularHighlights: 1
- _SpecularStrength: 64.1
- _SrcBlend: 1
- _UVSec: 0
- _ZWrite: 1
m_Colors:
- _Color: {r: 1, g: 1, b: 1, a: 0.541}
- _EmissionColor: {r: 0, g: 0, b: 0, a: 1}
- _SpecColor: {r: 1, g: 1, b: 1, a: 1}

83
Assets/LowEndMobilePipeline/TestScenes/Materials/LDRenderPipeMaterials/MobileColorsTile.mat


%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: MobileColorsTile
m_Shader: {fileID: 4800000, guid: 8d2bb70cbf9db8d4da26e15b26e74248, type: 3}
m_ShaderKeywords: _EMISSION _GLOSSINESS_FROM_BASE_ALPHA _SPECULAR_COLOR
m_LightmapFlags: 1
m_EnableInstancingVariants: 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}
- _DetailAlbedoMap:
m_Texture: {fileID: 0}
m_Scale: {x: 10, y: 10}
m_Offset: {x: 0, y: 0}
- _DetailMask:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _DetailNormalMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _EmissionMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 6}
m_Offset: {x: 0, y: 0}
- _MainTex:
m_Texture: {fileID: 2800000, guid: 618126695341ad844ac048b062fd2688, type: 3}
m_Scale: {x: 1, y: 6}
m_Offset: {x: 0, y: 0}
- _MetallicGlossMap:
m_Texture: {fileID: 2800000, guid: 4ffd0c63865e57b419b7ec9c1255a9be, type: 3}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _OcclusionMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _ParallaxMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _SpecGlossMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
m_Floats:
- _BumpScale: 1
- _Cutoff: 0.5
- _DetailNormalMapScale: 1
- _DstBlend: 0
- _GlossMapScale: 1
- _Glossiness: 0.474
- _GlossinessSource: 0
- _GlossyReflections: 1
- _Metallic: 0
- _Mode: 0
- _OcclusionStrength: 1
- _Parallax: 0.02
- _SmoothnessTextureChannel: 0
- _SpecSource: 0
- _SpecularHighlights: 1
- _SpecularStrength: 200
- _SrcBlend: 1
- _UVSec: 0
- _ZWrite: 1
m_Colors:
- _Color: {r: 1, g: 1, b: 1, a: 1}
- _EmissionColor: {r: 0, g: 0, b: 0, a: 1}
- _SpecColor: {r: 0.19999996, g: 0.19999996, b: 0.19999996, a: 1}

9
Assets/LowEndMobilePipeline/Shaders.meta


fileFormatVersion: 2
guid: 81841919e91d4b24ba3a6ca4a5167bce
folderAsset: yes
timeCreated: 1490023078
licenseType: Pro
DefaultImporter:
userData:
assetBundleName:
assetBundleVariant:

67
Assets/LowEndMobilePipeline/Shaders/LowEndParticlesAdd.shader


Shader "ScriptableRenderPipeline/LowEndMobile/Particles/Additive"
{
Properties
{
_MainTex("Particle Texture", 2D) = "white" {}
}
Category
{
Tags{"Queue" = "Transparent" "IgnoreProjector" = "True" "RenderType" = "Transparent" "RenderPipeline" = "LowEndPipeline" "PreviewType" = "Plane"}
Blend SrcAlpha One
Cull Off Lighting Off ZWrite Off
SubShader
{
Pass
{
Tags{"LightMode" = "LowEndMobileForward"}
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#pragma target 2.0
#pragma multi_compile_fog
#include "UnityCG.cginc"
sampler2D _MainTex;
struct appdata_t
{
float4 vertex : POSITION;
fixed4 color : COLOR;
float2 texcoord : TEXCOORD0;
};
struct v2f
{
float4 vertex : SV_POSITION;
fixed4 color : COLOR;
float2 texcoord : TEXCOORD0;
UNITY_FOG_COORDS(1)
};
float4 _MainTex_ST;
v2f vert(appdata_t v)
{
v2f o;
o.vertex = UnityObjectToClipPos(v.vertex);
o.color = v.color;
o.texcoord = TRANSFORM_TEX(v.texcoord,_MainTex);
UNITY_TRANSFER_FOG(o,o.vertex);
return o;
}
fixed4 frag(v2f i) : SV_Target
{
fixed4 col = 2.0f * i.color * tex2D(_MainTex, i.texcoord);
UNITY_APPLY_FOG_COLOR(i.fogCoord, col, fixed4(0,0,0,0)); // fog towards white due to our blend mode
return col;
}
ENDCG
}
}
}
}

9
Assets/LowEndMobilePipeline/Shaders/LowEndParticlesAdd.shader.meta


fileFormatVersion: 2
guid: dbe7dd837a4aa4f4789be2f8e40522a2
timeCreated: 1490023099
licenseType: Pro
ShaderImporter:
defaultTextures: []
userData:
assetBundleName:
assetBundleVariant:

68
Assets/LowEndMobilePipeline/Shaders/LowEndParticlesMultiply.shader


Shader "ScriptableRenderPipeline/LowEndMobile/Particles/Multiply"
{
Properties
{
_MainTex("Particle Texture", 2D) = "white" {}
}
Category
{
Tags{"Queue" = "Transparent" "IgnoreProjector" = "True" "RenderType" = "Transparent" "RenderPipeline" = "LowendMobile" "PreviewType" = "Plane"}
Blend Zero SrcColor
Cull Off Lighting Off ZWrite Off
SubShader
{
Pass
{
Tags { "LightMode" = "LowEndMobileForward" }
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#pragma target 2.0
#pragma multi_compile_fog
#include "UnityCG.cginc"
sampler2D _MainTex;
struct appdata_t
{
float4 vertex : POSITION;
fixed4 color : COLOR;
float2 texcoord : TEXCOORD0;
};
struct v2f
{
float4 vertex : SV_POSITION;
fixed4 color : COLOR;
float2 texcoord : TEXCOORD0;
UNITY_FOG_COORDS(1)
};
float4 _MainTex_ST;
v2f vert(appdata_t v)
{
v2f o;
o.vertex = UnityObjectToClipPos(v.vertex);
o.color = v.color;
o.texcoord = TRANSFORM_TEX(v.texcoord,_MainTex);
UNITY_TRANSFER_FOG(o,o.vertex);
return o;
}
fixed4 frag(v2f i) : SV_Target
{
half4 prev = i.color * tex2D(_MainTex, i.texcoord);
fixed4 col = lerp(half4(1,1,1,1), prev, prev.a);
UNITY_APPLY_FOG_COLOR(i.fogCoord, col, fixed4(1,1,1,1)); // fog towards white due to our blend mode
return col;
}
ENDCG
}
}
}
}

9
Assets/LowEndMobilePipeline/Shaders/LowEndParticlesMultiply.shader.meta


fileFormatVersion: 2
guid: 865346c6c43817d4c99b6594d9db6a0e
timeCreated: 1490023111
licenseType: Pro
ShaderImporter:
defaultTextures: []
userData:
assetBundleName:
assetBundleVariant:

9
Assets/LowEndMobilePipeline/Shaders/LowEndMobilePipeline.shader.meta


fileFormatVersion: 2
guid: 8d2bb70cbf9db8d4da26e15b26e74248
timeCreated: 1487263524
licenseType: Pro
ShaderImporter:
defaultTextures: []
userData:
assetBundleName:
assetBundleVariant:

229
Assets/LowEndMobilePipeline/Shaders/LowEndMobilePipelineCore.cginc


#define DEBUG_CASCADES 0
#define MAX_SHADOW_CASCADES 4
#define MAX_LIGHTS 8
#define INITIALIZE_LIGHT(light, lightIndex) \
light.pos = globalLightPos[lightIndex]; \
light.color = globalLightColor[lightIndex]; \
light.atten = globalLightAtten[lightIndex]; \
light.spotDir = globalLightSpotDir[lightIndex]
struct LightInput
{
half4 pos;
half4 color;
half4 atten;
half4 spotDir;
};
struct LowendVertexInput
{
float4 vertex : POSITION;
float3 normal : NORMAL;
float4 tangent : TANGENT;
float3 texcoord : TEXCOORD0;
float2 lightmapUV : TEXCOORD1;
};
struct v2f
{
float4 uv01 : TEXCOORD0; // uv01.xy: uv0, uv01.zw: uv1
float3 posWS : TEXCOORD1;
#if _NORMALMAP
half3 tangentToWorld0 : TEXCOORD2; // tangentToWorld matrix
half3 tangentToWorld1 : TEXCOORD3; // tangentToWorld matrix
half3 tangentToWorld2 : TEXCOORD4; // tangentToWorld matrix
#else
half3 normal : TEXCOORD2;
#endif
half4 viewDir : TEXCOORD5; // xyz: viewDir
UNITY_FOG_COORDS_PACKED(6, half4) // x: fogCoord, yzw: vertexColor
#ifndef _SHADOW_CASCADES
float4 shadowCoord : TEXCOORD7;
#endif
float4 hpos : SV_POSITION;
};
// The variables are very similar to built-in unity_LightColor, unity_LightPosition,
// unity_LightAtten, unity_SpotDirection as used by the VertexLit shaders, except here
// we use world space positions instead of view space.
half4 globalLightColor[MAX_LIGHTS];
float4 globalLightPos[MAX_LIGHTS];
half4 globalLightSpotDir[MAX_LIGHTS];
half4 globalLightAtten[MAX_LIGHTS];
int4 globalLightCount; // x: pixelLightCount, y = totalLightCount (pixel + vert)
sampler2D_float _ShadowMap;
float _PCFKernel[8];
half4x4 _WorldToShadow[MAX_SHADOW_CASCADES];
float4 _DirShadowSplitSpheres[MAX_SHADOW_CASCADES];
half _Shininess;
samplerCUBE _Cube;
half4 _ReflectColor;
inline void NormalMap(v2f i, out half3 normal)
{
#if _NORMALMAP
half3 normalmap = UnpackNormal(tex2D(_BumpMap, i.uv01.xy));
// glsl compiler will generate underperforming code by using a row-major pre multiplication matrix: mul(normalmap, i.tangentToWorld)
// i.tangetToWorld was initialized as column-major in vs and here dot'ing individual for better performance.
// The code below is similar to post multiply: mul(i.tangentToWorld, normalmap)
normal = half3(dot(normalmap, i.tangentToWorld0), dot(normalmap, i.tangentToWorld1), dot(normalmap, i.tangentToWorld2));
#else
normal = normalize(i.normal);
#endif
}
inline void SpecularGloss(half3 diffuse, half alpha, out half4 specularGloss)
{
#ifdef _SHARED_SPECULAR_DIFFUSE
specularGloss.rgb = diffuse;
specularGloss.a = alpha;
#elif defined(_SHARED_SPECULAR_DIFFUSE)
#if _GLOSSINESS_FROM_BASE_ALPHA
specularGloss.rgb = tex2D(_SpecGlossMap, i.uv01.xy) * _SpecColor;
specularGloss.a = alpha;
#else
specularGloss = tex2D(_SpecGlossMap, i.uv01.xy) * _SpecColor;
#endif
#else
#if _GLOSSINESS_FROM_BASE_ALPHA
specularGloss.rgb = _SpecColor;
specularGloss.a = alpha;
#else
specularGloss = _SpecColor;
#endif
#endif
}
inline void Emission(v2f i, out half3 emission)
{
#ifdef _EMISSION_MAP
emission = tex2D(_EmissionMap, i.uv01.xy) * _EmissionColor;
#else
emission = _EmissionColor;
#endif
}
inline void Indirect(v2f i, half3 diffuse, half3 normal, half glossiness, out half3 indirect)
{
#ifdef LIGHTMAP_ON
indirect = DecodeLightmap(UNITY_SAMPLE_TEX2D(unity_Lightmap, i.uv01.zw)) * diffuse;
#else
indirect = i.fogCoord.yzw * diffuse;
#endif
// TODO: we can use reflect vec to compute specular instead of half when computing cubemap reflection
#ifdef _CUBEMAP_REFLECTION
half3 reflectVec = reflect(-i.viewDir.xyz, normal);
half3 indirectSpecular = texCUBE(_Cube, reflectVec) * _ReflectColor * glossiness;
indirect += indirectSpecular;
#endif
}
half4 OutputColor(half3 color, half alpha)
{
#ifdef _ALPHABLEND_ON
return half4(color, alpha);
#else
return half4(color, 1);
#endif
}
inline half ComputeCascadeIndex(float3 wpos)
{
float3 fromCenter0 = wpos.xyz - _DirShadowSplitSpheres[0].xyz;
float3 fromCenter1 = wpos.xyz - _DirShadowSplitSpheres[1].xyz;
float3 fromCenter2 = wpos.xyz - _DirShadowSplitSpheres[2].xyz;
float3 fromCenter3 = wpos.xyz - _DirShadowSplitSpheres[3].xyz;
float4 distances2 = float4(dot(fromCenter0, fromCenter0), dot(fromCenter1, fromCenter1), dot(fromCenter2, fromCenter2), dot(fromCenter3, fromCenter3));
float4 vDirShadowSplitSphereSqRadii;
vDirShadowSplitSphereSqRadii.x = _DirShadowSplitSpheres[0].w;
vDirShadowSplitSphereSqRadii.y = _DirShadowSplitSpheres[1].w;
vDirShadowSplitSphereSqRadii.z = _DirShadowSplitSpheres[2].w;
vDirShadowSplitSphereSqRadii.w = _DirShadowSplitSpheres[3].w;
fixed4 weights = fixed4(distances2 < vDirShadowSplitSphereSqRadii);
weights.yzw = saturate(weights.yzw - weights.xyz);
return 4 - dot(weights, fixed4(4, 3, 2, 1));
}
inline half ShadowAttenuation(half3 shadowCoord)
{
if (shadowCoord.x <= 0 || shadowCoord.x >= 1 || shadowCoord.y <= 0 || shadowCoord.y >= 1)
return 1;
half depth = tex2D(_ShadowMap, shadowCoord).r;
#if defined(UNITY_REVERSED_Z)
return step(depth, shadowCoord.z);
#else
return step(shadowCoord.z, depth);
#endif
}
inline half ShadowPCF(half3 shadowCoord)
{
// TODO: simulate textureGatherOffset not available, simulate it
half2 offset = half2(0, 0);
half attenuation = ShadowAttenuation(half3(shadowCoord.xy + half2(_PCFKernel[0], _PCFKernel[1]) + offset, shadowCoord.z)) +
ShadowAttenuation(half3(shadowCoord.xy + half2(_PCFKernel[2], _PCFKernel[3]) + offset, shadowCoord.z)) +
ShadowAttenuation(half3(shadowCoord.xy + half2(_PCFKernel[4], _PCFKernel[5]) + offset, shadowCoord.z)) +
ShadowAttenuation(half3(shadowCoord.xy + half2(_PCFKernel[6], _PCFKernel[7]) + offset, shadowCoord.z));
return attenuation * 0.25;
}
inline half3 EvaluateOneLight(LightInput lightInput, half3 diffuseColor, half4 specularGloss, half3 normal, float3 posWorld, half3 viewDir)
{
float3 posToLight = lightInput.pos.xyz;
posToLight -= posWorld * lightInput.pos.w;
float distanceSqr = max(dot(posToLight, posToLight), 0.001);
float lightAtten = 1.0 / (1.0 + distanceSqr * lightInput.atten.z);
half3 lightDir = posToLight * rsqrt(distanceSqr);
half SdotL = saturate(dot(lightInput.spotDir.xyz, lightDir));
lightAtten *= saturate((SdotL - lightInput.atten.x) / lightInput.atten.y);
half cutoff = step(distanceSqr, lightInput.atten.w);
lightAtten *= cutoff;
half NdotL = saturate(dot(normal, lightDir));
half3 halfVec = normalize(lightDir + viewDir);
half NdotH = saturate(dot(normal, halfVec));
half3 lightColor = lightInput.color.rgb * lightAtten;
half3 diffuse = diffuseColor * lightColor * NdotL;
#if defined(_SHARED_SPECULAR_DIFFUSE) || defined(_SPECGLOSSMAP) || defined(_SPECULAR_COLOR)
half3 specular = specularGloss.rgb * lightColor * pow(NdotH, _Shininess * 128.0) * specularGloss.a;
return diffuse + specular;
#else
return diffuse;
#endif
}
inline half ComputeShadowAttenuation(v2f i)
{
half4 shadowCoord;
#ifndef _SHADOW_CASCADES
shadowCoord = i.shadowCoord;
#else
int cascadeIndex = ComputeCascadeIndex(i.posWS);
if (cascadeIndex < 4)
shadowCoord = mul(_WorldToShadow[cascadeIndex], half4(i.posWS, 1.0));
else
return 1.0;
#endif
shadowCoord.xyz /= shadowCoord.w;
shadowCoord.z = saturate(shadowCoord.z);
#ifdef SOFT_SHADOWS
return ShadowPCF(shadowCoord.xyz);
#else
return ShadowAttenuation(shadowCoord.xyz);
#endif
}

9
Assets/LowEndMobilePipeline/Shaders/LowEndMobilePipelineCore.cginc.meta


fileFormatVersion: 2
guid: 53686bf58189656459fca4c6ab04ebe5
timeCreated: 1488965025
licenseType: Pro
ShaderImporter:
defaultTextures: []
userData:
assetBundleName:
assetBundleVariant:

282
Assets/LowEndMobilePipeline/Shaders/LowEndMobilePipeline.shader


// Shader targeted for LowEnd mobile devices. Single Pass Forward Rendering. Shader Model 2
Shader "ScriptableRenderPipeline/LowEndMobile/NonPBR"
{
// Keep properties of StandardSpecular shader for upgrade reasons.
Properties
{
_Color("Color", Color) = (1,1,1,1)
_MainTex("Base (RGB) Glossiness / Alpha (A)", 2D) = "white" {}
_Cutoff("Alpha Cutoff", Range(0.0, 1.0)) = 0.5
_Shininess("Shininess", Range(0.01, 1.0)) = 1.0
_GlossMapScale("Smoothness Factor", Range(0.0, 1.0)) = 1.0
_Glossiness("Glossiness", Range(0.0, 1.0)) = 0.5
[Enum(Specular Alpha,0,Albedo Alpha,1)] _SmoothnessTextureChannel("Smoothness texture channel", Float) = 0
_Cube ("Reflection Cubemap", CUBE) = "" {}
_ReflectColor("Reflection Color", Color) = (1, 1, 1, 1)
_ReflectionSource("Reflection Source", Float) = 0
[HideInInspector] _SpecSource("Specular Color Source", Float) = 0.0
_SpecColor("Specular", Color) = (1.0, 1.0, 1.0)
_SpecGlossMap("Specular", 2D) = "white" {}
[HideInInspector] _GlossinessSource("Glossiness Source", Float) = 0.0
[ToggleOff] _SpecularHighlights("Specular Highlights", Float) = 1.0
[ToggleOff] _GlossyReflections("Glossy Reflections", Float) = 1.0
[HideInInspector] _BumpScale("Scale", Float) = 1.0
[NoScaleOffset] _BumpMap("Normal Map", 2D) = "bump" {}
_Parallax("Height Scale", Range(0.005, 0.08)) = 0.02
_ParallaxMap("Height Map", 2D) = "black" {}
_EmissionColor("Emission Color", Color) = (0,0,0)
_EmissionMap("Emission", 2D) = "white" {}
_DetailMask("Detail Mask", 2D) = "white" {}
_DetailAlbedoMap("Detail Albedo x2", 2D) = "grey" {}
_DetailNormalMapScale("Scale", Float) = 1.0
_DetailNormalMap("Normal Map", 2D) = "bump" {}
[Enum(UV0,0,UV1,1)] _UVSec("UV Set for secondary textures", Float) = 0
// Blending state
[HideInInspector] _Mode("__mode", Float) = 0.0
[HideInInspector] _SrcBlend("__src", Float) = 1.0
[HideInInspector] _DstBlend("__dst", Float) = 0.0
[HideInInspector] _ZWrite("__zw", Float) = 1.0
}
SubShader
{
Tags { "RenderType" = "Opaque" "RenderPipeline" = "LowEndMobilePipeline" }
LOD 300
Pass
{
Name "LD_SINGLE_PASS_FORWARD"
Tags { "LightMode" = "LowEndMobileForward" }
// Use same blending / depth states as Standard shader
Blend[_SrcBlend][_DstBlend]
ZWrite[_ZWrite]
CGPROGRAM
#pragma target 2.0
#pragma vertex vert
#pragma fragment frag
#pragma shader_feature _ _ALPHATEST_ON _ALPHABLEND_ON
#pragma shader_feature _ _SHARED_SPECULAR_DIFFUSE _SPECGLOSSMAP _SPECULAR_COLOR
#pragma shader_feature _GLOSSINESS_FROM_BASE_ALPHA
#pragma shader_feature _NORMALMAP
#pragma shader_feature _EMISSION_MAP
#pragma shader_feature _CUBEMAP_REFLECTION
#pragma multi_compile _ LIGHTMAP_ON
#pragma multi_compile _ HARD_SHADOWS SOFT_SHADOWS
#pragma multi_compile _ _SHADOW_CASCADES
#pragma multi_compile _ _VERTEX_LIGHTS
#pragma multi_compile_fog
#pragma only_renderers d3d9 d3d11 d3d11_9x glcore gles gles3 metal
#pragma enable_d3d11_debug_symbols
#include "UnityCG.cginc"
#include "UnityStandardBRDF.cginc"
#include "UnityStandardInput.cginc"
#include "UnityStandardUtils.cginc"
#include "LowEndMobilePipelineCore.cginc"
v2f vert(LowendVertexInput v)
{
v2f o = (v2f)0;
o.uv01.xy = TRANSFORM_TEX(v.texcoord, _MainTex);
o.uv01.zw = v.lightmapUV * unity_LightmapST.xy + unity_LightmapST.zw;
o.hpos = UnityObjectToClipPos(v.vertex);
o.posWS = mul(unity_ObjectToWorld, v.vertex).xyz;
o.viewDir.xyz = normalize(_WorldSpaceCameraPos - o.posWS);
half3 normal = normalize(UnityObjectToWorldNormal(v.normal));
#if _NORMALMAP
half sign = v.tangent.w * unity_WorldTransformParams.w;
half3 tangent = normalize(UnityObjectToWorldDir(v.tangent));
half3 binormal = cross(normal, tangent) * v.tangent.w;
// Initialize tangetToWorld in column-major to benefit from better glsl matrix multiplication code
o.tangentToWorld0 = half3(tangent.x, binormal.x, normal.x);
o.tangentToWorld1 = half3(tangent.y, binormal.y, normal.y);
o.tangentToWorld2 = half3(tangent.z, binormal.z, normal.z);
#else
o.normal = normal;
#endif
#if _VERTEX_LIGHTS
half4 diffuseAndSpecular = half4(1.0, 1.0, 1.0, 1.0);
for (int lightIndex = globalLightCount.x; lightIndex < globalLightCount.y; ++lightIndex)
{
LightInput lightInput;
INITIALIZE_LIGHT(lightInput, lightIndex);
o.fogCoord.yzw += EvaluateOneLight(lightInput, diffuseAndSpecular.rgb, diffuseAndSpecular, normal, o.posWS, o.viewDir.xyz);
}
#endif
#ifndef _SHADOW_CASCADES
o.shadowCoord = mul(_WorldToShadow[0], float4(o.posWS, 1.0));
#endif
#ifndef LIGHTMAP_ON
o.fogCoord.yzw += max(half3(0, 0, 0), ShadeSH9(half4(normal, 1)));
#endif
UNITY_TRANSFER_FOG(o, o.hpos);
return o;
}
half4 frag(v2f i) : SV_Target
{
half4 diffuseAlpha = tex2D(_MainTex, i.uv01.xy);
half3 diffuse = diffuseAlpha.rgb * _Color.rgb;
half alpha = diffuseAlpha.a * _Color.a;
// Keep for compatibility reasons. Shader Inpector throws a warning when using cutoff
// due overdraw performance impact.
#ifdef _ALPHATEST_ON
clip(alpha - _Cutoff);
#endif
half3 normal;
NormalMap(i, normal);
half4 specularGloss;
SpecularGloss(diffuse, alpha, specularGloss);
// Indirect Light Contribution
half3 indirect;
Indirect(i, diffuse, normal, alpha, indirect);
half3 emissionColor;
Emission(i, emissionColor);
// Compute direct contribution from main directional light.
// Only a single directional shadow caster is supported.
LightInput mainLight;
INITIALIZE_LIGHT(mainLight, 0);
half3 viewDir = i.viewDir.xyz;
half3 directColor = EvaluateOneLight(mainLight, diffuse, specularGloss, normal, i.posWS, viewDir);
#if defined(HARD_SHADOWS) || defined(SOFT_SHADOWS)
directColor *= ComputeShadowAttenuation(i);
#endif
// Compute direct contribution from additional lights.
for (int lightIndex = 1; lightIndex < globalLightCount.x; ++lightIndex)
{
LightInput additionalLight;
INITIALIZE_LIGHT(additionalLight, lightIndex);
directColor += EvaluateOneLight(additionalLight, diffuse, specularGloss, normal, i.posWS, viewDir);
}
half3 color = directColor + indirect + emissionColor;
UNITY_APPLY_FOG(i.fogCoord, color);
return OutputColor(color, alpha);
};
ENDCG
}
Pass
{
Name "LD_SHADOW_CASTER"
Tags { "Lightmode" = "ShadowCaster" }
ZWrite On ZTest LEqual
CGPROGRAM
#pragma target 2.0
#pragma vertex vert
#pragma fragment frag
float4 _WorldLightDirAndBias;
#include "UnityCG.cginc"
struct VertexInput
{
float4 pos : POSITION;
float3 normal : NORMAL;
};
// Similar to UnityClipSpaceShadowCasterPos but using LDPipeline lightdir and bias and applying near plane clamp
float4 ClipSpaceShadowCasterPos(float4 vertex, float3 normal)
{
float4 wPos = mul(unity_ObjectToWorld, vertex);
if (_WorldLightDirAndBias.w > 0.0)
{
float3 wNormal = UnityObjectToWorldNormal(normal);
// apply normal offset bias (inset position along the normal)
// bias needs to be scaled by sine between normal and light direction
// (http://the-witness.net/news/2013/09/shadow-mapping-summary-part-1/)
//
// _WorldLightDirAndBias.w shadow bias defined in LRRenderPipeline asset
float shadowCos = dot(wNormal, _WorldLightDirAndBias.xyz);
float shadowSine = sqrt(1 - shadowCos*shadowCos);
float normalBias = _WorldLightDirAndBias.w * shadowSine;
wPos.xyz -= wNormal * normalBias;
}
float4 clipPos = mul(UNITY_MATRIX_VP, wPos);
#if defined(UNITY_REVERSED_Z)
clipPos.z = min(clipPos.z, UNITY_NEAR_CLIP_VALUE);
#else
clipPos.z = max(clipPos.z, UNITY_NEAR_CLIP_VALUE);
#endif
return clipPos;
}
float4 vert(VertexInput i) : SV_POSITION
{
return ClipSpaceShadowCasterPos(i.pos, i.normal);
}
half4 frag() : SV_TARGET
{
return 0;
}
ENDCG
}
// This pass it not used during regular rendering, only for lightmap baking.
Pass
{
Name "LD_META"
Tags{ "LightMode" = "Meta" }
Cull Off
CGPROGRAM
#pragma vertex vert_meta
#pragma fragment frag_meta
#pragma shader_feature _EMISSION
#pragma shader_feature _METALLICGLOSSMAP
#pragma shader_feature _ _SMOOTHNESS_TEXTURE_ALBEDO_CHANNEL_A
#pragma shader_feature ___ _DETAIL_MULX2
#pragma shader_feature EDITOR_VISUALIZATION
#include "UnityStandardMeta.cginc"
ENDCG
}
}
Fallback "Standard (Specular setup)"
CustomEditor "LowendMobilePipelineMaterialEditor"
}

113
Assets/LowEndMobilePipeline/Editor/LowendPipelineAssetInspector.cs


using UnityEditor;
namespace UnityEngine.Experimental.Rendering.LowendMobile
{
[CustomEditor(typeof(LowEndMobilePipelineAsset))]
public class LowendPipelineAssetInspector : Editor
{
internal class Styles
{
public static GUIContent renderingLabel = new GUIContent("Rendering");
public static GUIContent shadowLabel = new GUIContent("Shadows");
public static GUIContent maxPixelLights = new GUIContent("Max per-pixel lights supported",
"Amount of dynamic lights processed in fragment shader. More than 1 per-pixel light is not recommended.");
public static GUIContent enableVertexLightLabel = new GUIContent("Enable Vertex Light",
"Enable up to 4 per-vertex dynamic lights.");
public static GUIContent enableLightmap = new GUIContent("Enable Lightmap",
"Only non-directional lightmaps are supported");
public static GUIContent enableAmbientProbe = new GUIContent("Enable Ambient Probe",
"Uses light probes as ambient light source for non-lightmapped objects.");
public static GUIContent shadowType = new GUIContent("Shadow Type",
"Single directional shadow supported. SOFT_SHADOWS applies shadow filtering.");
public static GUIContent shadowNearPlaneOffset = new GUIContent("Shadow Near Plane Offset",
"Offset shadow near plane to account for large triangles being distorted by pancaking");
public static GUIContent shadowDistante = new GUIContent("Shadow Distance", "Max shadow drawing distance");
public static GUIContent shadowBias = new GUIContent("Shadow Bias");
public static GUIContent shadowAtlasResolution = new GUIContent("Shadow Map Resolution",
"Resolution of shadow map texture. If cascades are enabled all cascades will be packed into this texture resolution.");
public static GUIContent shadowCascades = new GUIContent("Shadow Cascades",
"Number of cascades for directional shadows");
public static GUIContent shadowCascadeSplit = new GUIContent("Shadow Cascade Split",
"Percentages to split shadow volume");
}
private SerializedProperty m_MaxPixelLights;
private SerializedProperty m_SupportsVertexLightProp;
private SerializedProperty m_EnableLightmapsProp;
private SerializedProperty m_EnableAmbientProbeProp;
private SerializedProperty m_ShadowTypeProp;
private SerializedProperty m_ShadowNearPlaneOffsetProp;
private SerializedProperty m_ShadowBiasProperty;
private SerializedProperty m_ShadowDistanceProp;
private SerializedProperty m_ShadowAtlasResolutionProp;
private SerializedProperty m_ShadowCascadesProp;
private SerializedProperty m_ShadowCascade2SplitProp;
private SerializedProperty m_ShadowCascade4SplitProp;
void OnEnable()
{
m_MaxPixelLights = serializedObject.FindProperty("m_MaxPixelLights");
m_SupportsVertexLightProp = serializedObject.FindProperty("m_SupportsVertexLight");
m_EnableLightmapsProp = serializedObject.FindProperty("m_EnableLightmaps");
m_EnableAmbientProbeProp = serializedObject.FindProperty("m_EnableAmbientProbe");
m_ShadowTypeProp = serializedObject.FindProperty("m_ShadowType");
m_ShadowNearPlaneOffsetProp = serializedObject.FindProperty("m_ShadowNearPlaneOffset");
m_ShadowBiasProperty = serializedObject.FindProperty("m_ShadowBias");
m_ShadowDistanceProp = serializedObject.FindProperty("m_ShadowDistance");
m_ShadowAtlasResolutionProp = serializedObject.FindProperty("m_ShadowAtlasResolution");
m_ShadowCascadesProp = serializedObject.FindProperty("m_ShadowCascades");
m_ShadowCascade2SplitProp = serializedObject.FindProperty("m_Cascade2Split");
m_ShadowCascade4SplitProp = serializedObject.FindProperty("m_Cascade4Split");
}
public override void OnInspectorGUI()
{
LowEndMobilePipelineAsset pipeAsset = target as LowEndMobilePipelineAsset;
serializedObject.Update();
EditorGUILayout.Space();
EditorGUILayout.LabelField(Styles.renderingLabel, EditorStyles.boldLabel);
EditorGUI.indentLevel++;
EditorGUILayout.PropertyField(m_MaxPixelLights, Styles.maxPixelLights);
EditorGUILayout.PropertyField(m_SupportsVertexLightProp, Styles.enableVertexLightLabel);
EditorGUILayout.PropertyField(m_EnableLightmapsProp, Styles.enableLightmap);
EditorGUILayout.PropertyField(m_EnableAmbientProbeProp, Styles.enableAmbientProbe);
EditorGUI.indentLevel--;
EditorGUILayout.Space();
EditorGUILayout.Space();
EditorGUILayout.LabelField(Styles.shadowLabel, EditorStyles.boldLabel);
EditorGUI.indentLevel++;
EditorGUILayout.PropertyField(m_ShadowTypeProp, Styles.shadowType);
EditorGUILayout.PropertyField(m_ShadowAtlasResolutionProp, Styles.shadowAtlasResolution);
EditorGUILayout.PropertyField(m_ShadowNearPlaneOffsetProp, Styles.shadowNearPlaneOffset);
EditorGUILayout.PropertyField(m_ShadowBiasProperty, Styles.shadowBias);
EditorGUILayout.PropertyField(m_ShadowDistanceProp, Styles.shadowDistante);
EditorGUILayout.PropertyField(m_ShadowCascadesProp, Styles.shadowCascades);
ShadowCascades cascades = (ShadowCascades) m_ShadowCascadesProp.intValue;
if (cascades == ShadowCascades.FOUR_CASCADES)
{
EditorGUILayout.PropertyField(m_ShadowCascade4SplitProp, Styles.shadowCascadeSplit);
}
else if (cascades == ShadowCascades.TWO_CASCADES)
{
EditorGUILayout.PropertyField(m_ShadowCascade2SplitProp, Styles.shadowCascadeSplit);
}
EditorGUI.indentLevel--;
serializedObject.ApplyModifiedProperties();
}
}
}

12
Assets/LowEndMobilePipeline/Editor/LowendPipelineAssetInspector.cs.meta


fileFormatVersion: 2
guid: 81f58d95eba277541b76ad69cb7e3cc7
timeCreated: 1488386204
licenseType: Pro
MonoImporter:
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

12
Assets/LowEndMobilePipeline/Editor/LowendMobilePipelineMaterialEditor.cs.meta


fileFormatVersion: 2
guid: 0e3f7c90539343c4eaf7aa690b0e0391
timeCreated: 1487767801
licenseType: Pro
MonoImporter:
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

12
Assets/LowEndMobilePipeline/Editor/StandardToLowEndMaterialUpgrader.cs.meta


fileFormatVersion: 2
guid: aec5479bdc442cb4d96b1de3f5e5c818
timeCreated: 1484641774
licenseType: Pro
MonoImporter:
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

32
Assets/LowEndMobilePipeline/Editor/StandardToLowEndMaterialUpgrader.cs


using System.Collections.Generic;
namespace UnityEditor.Experimental.Rendering.LowendMobile
{
public class StandardToLowEndMaterialUpgrader
{
[MenuItem("RenderPipeline/LowEndMobilePipeline/Material Upgraders/Upgrade Standard Materials to Low End Mobile - Project Folder", false, 1)]
private static void UpgradeMaterialsToLDProject()
{
List<MaterialUpgrader> upgraders = new List<MaterialUpgrader>();
GetUpgraders(ref upgraders);
MaterialUpgrader.UpgradeProjectFolder(upgraders, "Upgrade to LD Materials");
}
[MenuItem("RenderPipeline/LowEndMobilePipeline/Material Upgraders/Upgrade Standard Materials to Low End Mobile - Selection", false, 2)]
private static void UpgradeMaterialsToLDSelection()
{
List<MaterialUpgrader> upgraders = new List<MaterialUpgrader>();
GetUpgraders(ref upgraders);
MaterialUpgrader.UpgradeSelection(upgraders, "Upgrade to LD Materials");
}
private static void GetUpgraders(ref List<MaterialUpgrader> upgraders)
{
upgraders.Add(new StandardUpgrader("Standard (Specular setup)"));
upgraders.Add(new StandardUpgrader("Standard"));
upgraders.Add(new TerrainUpgrader("TerrainSurface"));
}
}
}

12
Assets/LowEndMobilePipeline/Editor/LegacyShadersToLowEndUpgrader.cs.meta


fileFormatVersion: 2
guid: 6d97da3faef6c8a46bc29fcc467932b4
timeCreated: 1489573636
licenseType: Pro
MonoImporter:
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

12
Assets/LowEndMobilePipeline/Editor/LowendUpgraders.cs.meta


fileFormatVersion: 2
guid: 50feba52dc59c9943b45f22d41904a77
timeCreated: 1490024332
licenseType: Pro
MonoImporter:
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

85
Assets/LowEndMobilePipeline/Editor/LegacyShadersToLowEndUpgrader.cs


using System.Collections.Generic;
namespace UnityEditor.Experimental.Rendering.LowendMobile
{
public class LegacyShadersToLowEndUpgrader
{
[MenuItem("RenderPipeline/LowEndMobilePipeline/Material Upgraders/Upgrade Legacy Materials to LowEndMobile - Project", false, 3)]
public static void UpgradeMaterialsToLDProject()
{
List<MaterialUpgrader> materialUpgraders = new List<MaterialUpgrader>();
GetUpgraders(ref materialUpgraders);
MaterialUpgrader.UpgradeProjectFolder(materialUpgraders, "Upgrade to LD Materials");
}
[MenuItem("RenderPipeline/LowEndMobilePipeline/Material Upgraders/Upgrade Legacy Materials to LowEndMobile - Selection", false, 4)]
public static void UpgradeMaterialsToLDSelection()
{
List<MaterialUpgrader> materialUpgraders = new List<MaterialUpgrader>();
GetUpgraders(ref materialUpgraders);
MaterialUpgrader.UpgradeSelection(materialUpgraders, "Upgrade to LD Materials");
}
private static void GetUpgraders(ref List<MaterialUpgrader> materialUpgraders)
{
/////////////////////////////////////
// Legacy Shaders upgraders /
/////////////////////////////////////
materialUpgraders.Add(new LegacyBlinnPhongUpgrader("Legacy Shaders/Diffuse", SupportedUpgradeParams.diffuseOpaque));
materialUpgraders.Add(new LegacyBlinnPhongUpgrader("Legacy Shaders/Specular", SupportedUpgradeParams.specularOpaque));
materialUpgraders.Add(new LegacyBlinnPhongUpgrader("Legacy Shaders/Bumped Diffuse", SupportedUpgradeParams.diffuseOpaque));
materialUpgraders.Add(new LegacyBlinnPhongUpgrader("Legacy Shaders/Bumped Specular", SupportedUpgradeParams.specularOpaque));
// TODO: option to use environment map as texture or use reflection probe
materialUpgraders.Add(new LegacyBlinnPhongUpgrader("Legacy Shaders/Reflective/Bumped Diffuse", SupportedUpgradeParams.diffuseCubemap));
materialUpgraders.Add(new LegacyBlinnPhongUpgrader("Legacy Shaders/Reflective/Bumped Specular", SupportedUpgradeParams.specularOpaque));
materialUpgraders.Add(new LegacyBlinnPhongUpgrader("Legacy Shaders/Reflective/Diffuse", SupportedUpgradeParams.diffuseCubemap));
materialUpgraders.Add(new LegacyBlinnPhongUpgrader("Legacy Shaders/Reflective/Specular", SupportedUpgradeParams.specularOpaque));
// Self-Illum upgrader
materialUpgraders.Add(new LegacyBlinnPhongUpgrader("Legacy Shaders/Self-Illumin/Diffuse", SupportedUpgradeParams.diffuseOpaque));
materialUpgraders.Add(new LegacyBlinnPhongUpgrader("Legacy Shaders/Self-Illumin/Bumped Diffuse", SupportedUpgradeParams.diffuseOpaque));
materialUpgraders.Add(new LegacyBlinnPhongUpgrader("Legacy Shaders/Self-Illumin/Specular", SupportedUpgradeParams.specularOpaque));
materialUpgraders.Add(new LegacyBlinnPhongUpgrader("Legacy Shaders/Self-Illumin/Bumped Specular", SupportedUpgradeParams.specularOpaque));
// Alpha Blended
materialUpgraders.Add(new LegacyBlinnPhongUpgrader("Legacy Shaders/Transparent/Diffuse", SupportedUpgradeParams.diffuseAlpha));
materialUpgraders.Add(new LegacyBlinnPhongUpgrader("Legacy Shaders/Transparent/Specular", SupportedUpgradeParams.specularAlpha));
materialUpgraders.Add(new LegacyBlinnPhongUpgrader("Legacy Shaders/Transparent/Bumped Diffuse", SupportedUpgradeParams.diffuseAlpha));
materialUpgraders.Add(new LegacyBlinnPhongUpgrader("Legacy Shaders/Transparent/Bumped Specular", SupportedUpgradeParams.specularAlpha));
// Cutout
materialUpgraders.Add(new LegacyBlinnPhongUpgrader("Legacy Shaders/Transparent/Cutout/Diffuse", SupportedUpgradeParams.diffuseAlphaCutout));
materialUpgraders.Add(new LegacyBlinnPhongUpgrader("Legacy Shaders/Transparent/Cutout/Specular", SupportedUpgradeParams.specularAlphaCutout));
materialUpgraders.Add(new LegacyBlinnPhongUpgrader("Legacy Shaders/Transparent/Cutout/Bumped Diffuse", SupportedUpgradeParams.diffuseAlphaCutout));
materialUpgraders.Add(new LegacyBlinnPhongUpgrader("Legacy Shaders/Transparent/Cutout/Bumped Specular", SupportedUpgradeParams.specularAlphaCutout));
/////////////////////////////////////
// Reflective Shader Upgraders /
/////////////////////////////////////
materialUpgraders.Add(new LegacyBlinnPhongUpgrader("Reflective/Diffuse Transperant", SupportedUpgradeParams.diffuseCubemapAlpha));
materialUpgraders.Add(new LegacyBlinnPhongUpgrader("Reflective/Diffuse Reflection Spec", SupportedUpgradeParams.specularCubemap));
materialUpgraders.Add(new LegacyBlinnPhongUpgrader("Reflective/Diffuse Reflection Spec Transp", SupportedUpgradeParams.specularCubemapAlpha));
/////////////////////////////////////
// Mobile Upgraders /
/////////////////////////////////////
materialUpgraders.Add(new LegacyBlinnPhongUpgrader("Mobile/Diffuse", SupportedUpgradeParams.diffuseOpaque));
materialUpgraders.Add(new LegacyBlinnPhongUpgrader("Mobile/Bumped Specular", SupportedUpgradeParams.specularOpaque));
materialUpgraders.Add(new LegacyBlinnPhongUpgrader("Mobile/Bumped Specular(1 Directional Light)", SupportedUpgradeParams.specularOpaque));
materialUpgraders.Add(new LegacyBlinnPhongUpgrader("Mobile/Bumped Diffuse", SupportedUpgradeParams.diffuseOpaque));
materialUpgraders.Add(new LegacyBlinnPhongUpgrader("Mobile/Unlit (Supports Lightmap)", SupportedUpgradeParams.diffuseOpaque));
materialUpgraders.Add(new LegacyBlinnPhongUpgrader("Mobile/VertexLit", SupportedUpgradeParams.specularOpaque));
/////////////////////////////////////
// Particles /
/////////////////////////////////////
materialUpgraders.Add(new ParticlesAdditiveUpgrader("Particles/Additive"));
materialUpgraders.Add(new ParticlesAdditiveUpgrader("Mobile/Particles/Additive"));
materialUpgraders.Add(new ParticlesMultiplyUpgrader("Particles/Multiply"));
materialUpgraders.Add(new ParticlesMultiplyUpgrader("Mobile/Particles/Multiply"));
}
}
}

282
Assets/LowEndMobilePipeline/Editor/LowendMobilePipelineMaterialEditor.cs


using System;
using UnityEditor;
using UnityEngine;
using UnityEngine.Rendering;
using UnityEditor.Experimental.Rendering.LowendMobile;
public class LowendMobilePipelineMaterialEditor : ShaderGUI
{
private const float kMinShininessValue = 0.01f;
private MaterialProperty blendModeProp = null;
private MaterialProperty albedoMapProp = null;
private MaterialProperty albedoColorProp = null;
private MaterialProperty alphaCutoffProp = null;
private MaterialProperty specularSourceProp = null;
private MaterialProperty glossinessSourceProp = null;
private MaterialProperty reflectionSourceProp = null;
private MaterialProperty specularGlossMapProp = null;
private MaterialProperty specularColorProp = null;
private MaterialProperty shininessProp = null;
private MaterialProperty bumpMapProp = null;
private MaterialProperty emissionMapProp = null;
private MaterialProperty emissionColorProp = null;
private MaterialProperty reflectionMapProp = null;
private MaterialProperty reflectionColorProp = null;
private MaterialEditor m_MaterialEditor = null;
private static class Styles
{
public static GUIContent[] albedoGlosinessLabels =
{
new GUIContent("Base (RGB) Glossiness (A)", "Base Color (RGB) and Glossiness (A)"),
new GUIContent("Base (RGB)", "Base Color (RGB)")
};
public static GUIContent albedoAlphaLabel = new GUIContent("Base (RGB) Alpha (A)",
"Base Color (RGB) and Transparency (A)");
public static GUIContent[] specularGlossMapLabels =
{
new GUIContent("Specular Color (RGB)", "Specular Color (RGB)"),
new GUIContent("Specular Color (RGB) Glossiness (A)", "Specular Color (RGB) Glossiness (A)")
};
public static GUIContent normalMapText = new GUIContent("Normal Map", "Normal Map");
public static GUIContent emissionMapLabel = new GUIContent("Emission Map", "Emission Map");
public static GUIContent reflectionMapLabel = new GUIContent("Reflection Source", "Reflection Source Map");
public static GUIContent alphaCutoutWarning =
new GUIContent(
"This material has alpha cutout enabled. Alpha cutout has severe performance impact on mobile!");
public static GUIStyle warningStyle = new GUIStyle();
public static readonly string[] blendNames = Enum.GetNames(typeof(UpgradeBlendMode));
public static readonly string[] specSourceNames = Enum.GetNames(typeof(SpecularSource));
public static readonly string[] glossinessSourceNames = Enum.GetNames(typeof(GlossinessSource));
public static readonly string[] speculaSourceNames = Enum.GetNames(typeof(ReflectionSource));
public static string renderingModeLabel = "Rendering Mode";
public static string specularSourceLabel = "Specular Color Source";
public static string glossinessSourceLable = "Glossiness Source";
public static string glossinessSource = "Glossiness Source";
public static string albedoColorLabel = "Base Color";
public static string albedoMapAlphaLabel = "Base(RGB) Alpha(A)";
public static string albedoMapGlossinessLabel = "Base(RGB) Glossiness (A)";
public static string alphaCutoffLabel = "Alpha Cutoff";
public static string shininessLabel = "Shininess";
public static string normalMapLabel = "Normal map";
public static string emissionColorLabel = "Emission Color";
public static string reflectionSourceLabel = "Reflection Source";
}
private void FindMaterialProperties(MaterialProperty[] properties)
{
blendModeProp = FindProperty("_Mode", properties);
albedoMapProp = FindProperty("_MainTex", properties);
albedoColorProp = FindProperty("_Color", properties);
alphaCutoffProp = FindProperty("_Cutoff", properties);
specularSourceProp = FindProperty("_SpecSource", properties);
glossinessSourceProp = FindProperty("_GlossinessSource", properties);
specularGlossMapProp = FindProperty("_SpecGlossMap", properties);
specularColorProp = FindProperty("_SpecColor", properties);
shininessProp = FindProperty("_Shininess", properties);
bumpMapProp = FindProperty("_BumpMap", properties);
emissionMapProp = FindProperty("_EmissionMap", properties);
emissionColorProp = FindProperty("_EmissionColor", properties);
reflectionMapProp = FindProperty("_Cube", properties);
reflectionColorProp = FindProperty("_ReflectColor", properties);
reflectionSourceProp = FindProperty("_ReflectionSource", properties);
}
public override void OnGUI(MaterialEditor materialEditor, MaterialProperty[] properties)
{
Material material = materialEditor.target as Material;
m_MaterialEditor = materialEditor;
FindMaterialProperties(properties);
EditorGUI.BeginChangeCheck();
DoBlendMode();
EditorGUILayout.Space();
DoSpecular();
EditorGUILayout.Space();
m_MaterialEditor.TexturePropertySingleLine(Styles.normalMapText, bumpMapProp);
EditorGUILayout.Space();
m_MaterialEditor.TexturePropertySingleLine(Styles.emissionMapLabel, emissionMapProp, emissionColorProp);
EditorGUILayout.Space();
DoReflection();
if (EditorGUI.EndChangeCheck())
LegacyBlinnPhongUpgrader.UpdateMaterialKeywords(material);
EditorGUILayout.Space();
EditorGUILayout.Space();
materialEditor.RenderQueueField();
EditorGUILayout.Space();
EditorGUILayout.Space();
if ((UpgradeBlendMode) blendModeProp.floatValue == UpgradeBlendMode.Cutout)
{
Styles.warningStyle.normal.textColor = Color.yellow;
EditorGUILayout.LabelField(Styles.alphaCutoutWarning, Styles.warningStyle);
}
}
public override void AssignNewShaderToMaterial(Material material, Shader oldShader, Shader newShader)
{
base.AssignNewShaderToMaterial(material, oldShader, newShader);
// Shininess value cannot be zero since it will produce undefined values for cases where pow(0, 0).
float shininess = material.GetFloat("_Shininess");
material.SetFloat("_Shininess", Mathf.Clamp(shininess, kMinShininessValue, 1.0f));
string oldShaderName = oldShader.name;
string[] shaderStrings = oldShaderName.Split('/');
if (shaderStrings[0].Equals("Legacy Shaders") || shaderStrings[0].Equals("Mobile") ||
shaderStrings[0].Equals("Reflective"))
{
ConvertFromLegacy(material, oldShaderName);
}
LegacyBlinnPhongUpgrader.UpdateMaterialKeywords(material);
}
private void DoBlendMode()
{
int modeValue = (int) blendModeProp.floatValue;
EditorGUI.BeginChangeCheck();
modeValue = EditorGUILayout.Popup(Styles.renderingModeLabel, modeValue, Styles.blendNames);
if (EditorGUI.EndChangeCheck())
blendModeProp.floatValue = modeValue;
UpgradeBlendMode mode = (UpgradeBlendMode) blendModeProp.floatValue;
EditorGUILayout.Space();
if (mode == UpgradeBlendMode.Opaque)
{
int glossSource = (int) glossinessSourceProp.floatValue;
m_MaterialEditor.TexturePropertySingleLine(Styles.albedoGlosinessLabels[glossSource], albedoMapProp,
albedoColorProp);
m_MaterialEditor.TextureScaleOffsetProperty(albedoMapProp);
}
else
{
m_MaterialEditor.TexturePropertySingleLine(Styles.albedoAlphaLabel, albedoMapProp, albedoColorProp);
m_MaterialEditor.TextureScaleOffsetProperty(albedoMapProp);
if (mode == UpgradeBlendMode.Cutout)
m_MaterialEditor.RangeProperty(alphaCutoffProp, "Cutoff");
}
}
private void DoSpecular()
{
EditorGUILayout.Space();
int source = (int) specularSourceProp.floatValue;
EditorGUI.BeginChangeCheck();
source = EditorGUILayout.Popup(Styles.specularSourceLabel, source, Styles.specSourceNames);
if (EditorGUI.EndChangeCheck())
{
specularSourceProp.floatValue = source;
if (source == (int) SpecularSource.BaseTexture)
glossinessSourceProp.floatValue = (float) GlossinessSource.BaseAlpha;
}
SpecularSource specSource = (SpecularSource) specularSourceProp.floatValue;
if (specSource != SpecularSource.NoSpecular)
{
int glossinessSource = (int) glossinessSourceProp.floatValue;
EditorGUI.BeginChangeCheck();
glossinessSource = EditorGUILayout.Popup(Styles.glossinessSourceLable, glossinessSource,
Styles.glossinessSourceNames);
if (EditorGUI.EndChangeCheck())
glossinessSourceProp.floatValue = (float) glossinessSource;
}
int glossSource = (int) glossinessSourceProp.floatValue;
if (specSource == SpecularSource.SpecularTextureAndColor)
{
m_MaterialEditor.TexturePropertySingleLine(Styles.specularGlossMapLabels[glossSource],
specularGlossMapProp, specularColorProp);
}
if (specSource != SpecularSource.NoSpecular)
{
EditorGUI.BeginChangeCheck();
float shininess = EditorGUILayout.Slider(Styles.shininessLabel, shininessProp.floatValue,
kMinShininessValue, 1.0f);
if (EditorGUI.EndChangeCheck())
shininessProp.floatValue = shininess;
}
}
private void DoReflection()
{
EditorGUILayout.Space();
int source = (int) reflectionSourceProp.floatValue;
EditorGUI.BeginChangeCheck();
source = EditorGUILayout.Popup(Styles.reflectionSourceLabel, source, Styles.speculaSourceNames);
if (EditorGUI.EndChangeCheck())
reflectionSourceProp.floatValue = (float) source;
EditorGUILayout.Space();
ReflectionSource reflectionSource = (ReflectionSource) reflectionSourceProp.floatValue;
if (reflectionSource == ReflectionSource.Cubemap)
m_MaterialEditor.TexturePropertySingleLine(Styles.reflectionMapLabel, reflectionMapProp,
reflectionColorProp);
}
private void ConvertFromLegacy(Material material, string oldShaderName)
{
UpgradeParams shaderUpgradeParams;
if (oldShaderName.Contains("Transp"))
{
shaderUpgradeParams.blendMode = UpgradeBlendMode.Alpha;
shaderUpgradeParams.glosinessSource = GlossinessSource.SpecularAlpha;
}
else if (oldShaderName.Contains("Cutout"))
{
shaderUpgradeParams.blendMode = UpgradeBlendMode.Cutout;
shaderUpgradeParams.glosinessSource = GlossinessSource.SpecularAlpha;
}
else
{
shaderUpgradeParams.blendMode = UpgradeBlendMode.Opaque;
shaderUpgradeParams.glosinessSource = GlossinessSource.BaseAlpha;
}
if (oldShaderName.Contains("Spec"))
shaderUpgradeParams.specularSource = SpecularSource.SpecularTextureAndColor;
else
shaderUpgradeParams.specularSource = SpecularSource.NoSpecular;
if (oldShaderName.Contains("Reflective"))
shaderUpgradeParams.reflectionSource = ReflectionSource.Cubemap;
else
shaderUpgradeParams.reflectionSource = ReflectionSource.NoReflection;
material.SetFloat("_Mode", (float) shaderUpgradeParams.blendMode);
material.SetFloat("_SpecSource", (float) shaderUpgradeParams.specularSource);
material.SetFloat("_GlossinessSource", (float) shaderUpgradeParams.glosinessSource);
material.SetFloat("_ReflectionSource", (float) shaderUpgradeParams.reflectionSource);
if (oldShaderName.Contains("Self-Illumin"))
{
material.SetTexture("_EmissionMap", material.GetTexture("_MainTex"));
material.SetTexture("_MainTex", null);
material.SetColor("_EmissionColor", Color.white);
}
}
}

37
Assets/LowEndMobilePipeline/Editor/UpgradeCommon.cs


namespace UnityEditor.Experimental.Rendering.LowendMobile
{
public enum UpgradeBlendMode
{
Opaque,
Cutout,
Alpha
}
public enum SpecularSource
{
SpecularTextureAndColor,
BaseTexture,
NoSpecular
}
public enum GlossinessSource
{
BaseAlpha,
SpecularAlpha
}
public enum ReflectionSource
{
NoReflection,
Cubemap,
ReflectionProbe
}
public struct UpgradeParams
{
public UpgradeBlendMode blendMode;
public SpecularSource specularSource;
public GlossinessSource glosinessSource;
public ReflectionSource reflectionSource;
}
}

12
Assets/LowEndMobilePipeline/Editor/UpgradeCommon.cs.meta


fileFormatVersion: 2
guid: 8fe5351dffe46e648adb2abd7a167ce7
timeCreated: 1490691870
licenseType: Pro
MonoImporter:
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

253
Assets/LowEndMobilePipeline/Editor/LowendUpgraders.cs


using UnityEngine;
using UnityEngine.Rendering;
namespace UnityEditor.Experimental.Rendering.LowendMobile
{
public static class SupportedUpgradeParams
{
static public UpgradeParams diffuseOpaque = new UpgradeParams()
{
blendMode = UpgradeBlendMode.Opaque,
specularSource = SpecularSource.NoSpecular,
glosinessSource = GlossinessSource.BaseAlpha,
reflectionSource = ReflectionSource.NoReflection
};
static public UpgradeParams specularOpaque = new UpgradeParams()
{
blendMode = UpgradeBlendMode.Opaque,
specularSource = SpecularSource.SpecularTextureAndColor,
glosinessSource = GlossinessSource.BaseAlpha,
reflectionSource = ReflectionSource.NoReflection
};
static public UpgradeParams diffuseAlpha = new UpgradeParams()
{
blendMode = UpgradeBlendMode.Alpha,
specularSource = SpecularSource.NoSpecular,
glosinessSource = GlossinessSource.SpecularAlpha,
reflectionSource = ReflectionSource.NoReflection
};
static public UpgradeParams specularAlpha = new UpgradeParams()
{
blendMode = UpgradeBlendMode.Alpha,
specularSource = SpecularSource.SpecularTextureAndColor,
glosinessSource = GlossinessSource.SpecularAlpha,
reflectionSource = ReflectionSource.NoReflection
};
static public UpgradeParams diffuseAlphaCutout = new UpgradeParams()
{
blendMode = UpgradeBlendMode.Cutout,
specularSource = SpecularSource.NoSpecular,
glosinessSource = GlossinessSource.SpecularAlpha,
reflectionSource = ReflectionSource.NoReflection
};
static public UpgradeParams specularAlphaCutout = new UpgradeParams()
{
blendMode = UpgradeBlendMode.Cutout,
specularSource = SpecularSource.SpecularTextureAndColor,
glosinessSource = GlossinessSource.SpecularAlpha,
reflectionSource = ReflectionSource.NoReflection
};
static public UpgradeParams diffuseCubemap = new UpgradeParams()
{
blendMode = UpgradeBlendMode.Opaque,
specularSource = SpecularSource.NoSpecular,
glosinessSource = GlossinessSource.BaseAlpha,
reflectionSource = ReflectionSource.Cubemap
};
static public UpgradeParams specularCubemap = new UpgradeParams()
{
blendMode = UpgradeBlendMode.Opaque,
specularSource = SpecularSource.SpecularTextureAndColor,
glosinessSource = GlossinessSource.BaseAlpha,
reflectionSource = ReflectionSource.Cubemap
};
static public UpgradeParams diffuseCubemapAlpha = new UpgradeParams()
{
blendMode = UpgradeBlendMode.Alpha,
specularSource = SpecularSource.NoSpecular,
glosinessSource = GlossinessSource.BaseAlpha,
reflectionSource = ReflectionSource.Cubemap
};
static public UpgradeParams specularCubemapAlpha = new UpgradeParams()
{
blendMode = UpgradeBlendMode.Alpha,
specularSource = SpecularSource.SpecularTextureAndColor,
glosinessSource = GlossinessSource.BaseAlpha,
reflectionSource = ReflectionSource.Cubemap
};
}
public class LegacyBlinnPhongUpgrader : MaterialUpgrader
{
public LegacyBlinnPhongUpgrader(string oldShaderName, UpgradeParams upgradeParams)
{
RenameShader(oldShaderName, "ScriptableRenderPipeline/LowEndMobile/NonPBR", UpdateMaterialKeywords);
SetFloat("_Mode", (float)upgradeParams.blendMode);
SetFloat("_SpecSource", (float)upgradeParams.specularSource);
SetFloat("_GlossinessSource", (float)upgradeParams.glosinessSource);
SetFloat("_ReflectionSource", (float)upgradeParams.reflectionSource);
if (oldShaderName.Contains("Legacy Shaders/Self-Illumin"))
{
RenameTexture("_MainTex", "_EmissionMap");
RemoveTexture("_MainTex");
SetColor("_EmissionColor", Color.white);
}
}
public static void UpdateMaterialKeywords(Material material)
{
UpdateMaterialBlendMode(material);
UpdateMaterialSpecularSource(material);
UpdateMaterialReflectionSource(material);
SetKeyword(material, "_NORMALMAP", material.GetTexture("_BumpMap"));
SetKeyword(material, "_SPECGLOSSMAP", material.GetTexture("_SpecGlossMap"));
SetKeyword(material, "_CUBEMAP_REFLECTION", material.GetTexture("_Cube"));
SetKeyword(material, "_EMISSION_MAP", material.GetTexture("_EmissionMap"));
}
private static void UpdateMaterialBlendMode(Material material)
{
UpgradeBlendMode mode = (UpgradeBlendMode)material.GetFloat("_Mode");
switch (mode)
{
case UpgradeBlendMode.Opaque:
material.SetOverrideTag("RenderType", "");
material.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One);
material.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.Zero);
material.SetInt("_ZWrite", 1);
SetKeyword(material, "_ALPHATEST_ON", false);
SetKeyword(material, "_ALPHABLEND_ON", false);
material.renderQueue = -1;
break;
case UpgradeBlendMode.Cutout:
material.SetOverrideTag("RenderType", "Transparent");
material.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One);
material.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.Zero);
material.SetInt("_ZWrite", 1);
SetKeyword(material, "_ALPHATEST_ON", true);
SetKeyword(material, "_ALPHABLEND_ON", false);
material.renderQueue = (int)RenderQueue.AlphaTest;
break;
case UpgradeBlendMode.Alpha:
material.SetOverrideTag("RenderType", "Transparent");
material.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.SrcAlpha);
material.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha);
material.SetInt("_ZWrite", 0);
SetKeyword(material, "_ALPHATEST_ON", false);
SetKeyword(material, "_ALPHABLEND_ON", true);
material.renderQueue = (int)RenderQueue.Transparent;
break;
}
}
private static void UpdateMaterialSpecularSource(Material material)
{
SpecularSource specSource = (SpecularSource)material.GetFloat("_SpecSource");
if (specSource == SpecularSource.NoSpecular)
{
SetKeyword(material, "_SHARED_SPECULAR_DIFFUSE", false);
SetKeyword(material, "_SPECULAR_MAP", false);
SetKeyword(material, "_SPECULAR_COLOR", false);
}
else if (specSource == SpecularSource.BaseTexture)
{
SetKeyword(material, "_SHARED_SPECULAR_DIFFUSE", true);
SetKeyword(material, "_SPECULAR_MAP", false);
SetKeyword(material, "_SPECULAR_COLOR", false);
}
else if (specSource == SpecularSource.SpecularTextureAndColor && material.GetTexture("_SpecGlossMap"))
{
SetKeyword(material, "_SHARED_SPECULAR_DIFFUSE", false);
SetKeyword(material, "_SPECULAR_MAP", true);
SetKeyword(material, "_SPECULAR_COLOR", false);
}
else
{
SetKeyword(material, "_SHARED_SPECULAR_DIFFUSE", false);
SetKeyword(material, "_SPECULAR_MAP", false);
SetKeyword(material, "_SPECULAR_COLOR", true);
}
GlossinessSource glossSource = (GlossinessSource)material.GetFloat("_GlossinessSource");
if (glossSource == GlossinessSource.BaseAlpha)
SetKeyword(material, "_GLOSSINESS_FROM_BASE_ALPHA", true);
else
SetKeyword(material, "_GLOSSINESS_FROM_BASE_ALPHA", false);
}
private static void UpdateMaterialReflectionSource(Material material)
{
ReflectionSource reflectionSource = (ReflectionSource)material.GetFloat("_ReflectionSource");
if (reflectionSource == ReflectionSource.NoReflection)
{
SetKeyword(material, "_CUBEMAP_REFLECTION", false);
}
else if (reflectionSource == ReflectionSource.Cubemap && material.GetTexture("_Cube"))
{
SetKeyword(material, "_CUBEMAP_REFLECTION", true);
}
else if (reflectionSource == ReflectionSource.ReflectionProbe)
{
Debug.LogWarning("Reflection probe not implemented yet");
SetKeyword(material, "_CUBEMAP_REFLECTION", false);
}
else
{
SetKeyword(material, "_CUBEMAP_REFLECTION", false);
}
}
private static void SetKeyword(Material material, string keyword, bool enable)
{
if (enable)
material.EnableKeyword(keyword);
else
material.DisableKeyword(keyword);
}
}
public class ParticlesMultiplyUpgrader : MaterialUpgrader
{
public ParticlesMultiplyUpgrader(string oldShaderName)
{
RenameShader(oldShaderName, "ScriptableRenderPipeline/LowEndMobile/Particles/Multiply");
}
}
public class ParticlesAdditiveUpgrader : MaterialUpgrader
{
public ParticlesAdditiveUpgrader(string oldShaderName)
{
RenameShader(oldShaderName, "ScriptableRenderPipeline/LowEndMobile/Particles/Additive");
}
}
public class StandardUpgrader : MaterialUpgrader
{
public StandardUpgrader(string oldShaderName)
{
RenameShader(oldShaderName, "ScriptableRenderPipeline/LowEndMobile/NonPBR");
}
}
public class TerrainUpgrader : MaterialUpgrader
{
public TerrainUpgrader(string oldShaderName)
{
RenameShader(oldShaderName, "ScriptableRenderPipeline/LowEndMobile/NonPBR");
SetFloat("_Shininess", 1.0f);
}
}
}

472
Assets/LowEndMobilePipeline/LowEndMobilePipeline.cs


using System;
using System.Collections.Generic;
using UnityEngine.Rendering;
namespace UnityEngine.Experimental.Rendering.LowendMobile
{
public class LowEndMobilePipeline : RenderPipeline, IComparer<VisibleLight>
{
private readonly LowEndMobilePipelineAsset m_Asset;
private static readonly int kMaxCascades = 4;
private static readonly int kMaxLights = 8;
private static readonly int kMaxVertexLights = 4;
private int m_ShadowLightIndex = -1;
private int m_ShadowCasterCascadesCount = kMaxCascades;
private readonly int[] m_LightTypePriority = new int[4] {2, 1, 2, 0}; // Spot and Point lights have max priority
private int m_ShadowMapProperty;
private RenderTargetIdentifier m_ShadowMapRTID;
private int m_DepthBufferBits = 24;
private Vector4[] m_DirectionalShadowSplitDistances = new Vector4[kMaxCascades];
private static readonly ShaderPassName m_ForwardBasePassName = new ShaderPassName("LowEndMobileForward");
private Vector4[] m_LightPositions = new Vector4[kMaxLights];
private Vector4[] m_LightColors = new Vector4[kMaxLights];
private Vector4[] m_LightAttenuations = new Vector4[kMaxLights];
private Vector4[] m_LightSpotDirections = new Vector4[kMaxLights];
private ShadowSettings m_ShadowSettings = ShadowSettings.Default;
private ShadowSliceData[] m_ShadowSlices = new ShadowSliceData[kMaxCascades];
public LowEndMobilePipeline(LowEndMobilePipelineAsset asset)
{
m_Asset = asset;
BuildShadowSettings();
m_ShadowMapProperty = Shader.PropertyToID("_ShadowMap");
m_ShadowMapRTID = new RenderTargetIdentifier(m_ShadowMapProperty);
}
public override void Render(ScriptableRenderContext context, Camera[] cameras)
{
var prevPipe = Shader.globalRenderPipeline;
Shader.globalRenderPipeline = "LowEndMobilePipeline";
base.Render(context, cameras);
foreach (Camera camera in cameras)
{
CullingParameters cullingParameters;
if (!CullResults.GetCullingParameters(camera, out cullingParameters))
continue;
cullingParameters.shadowDistance = m_ShadowSettings.maxShadowDistance;
CullResults cull = CullResults.Cull(ref cullingParameters, context);
VisibleLight[] visibleLights = cull.visibleLights;
int pixelLightsCount, vertexLightsCount;
GetMaxSupportedLights(visibleLights.Length, out pixelLightsCount, out vertexLightsCount);
// TODO: handle shader keywords when no lights are present
SortLights(ref visibleLights, pixelLightsCount);
// TODO: Add remaining lights to SH
// Render Shadow Map
bool shadowsRendered = false;
if (m_ShadowLightIndex > -1)
shadowsRendered = RenderShadows(cull, visibleLights[m_ShadowLightIndex], context);
// Setup camera matrices and RT
context.SetupCameraProperties(camera);
// Clear RenderTarget to avoid tile initialization on mobile GPUs
// https://community.arm.com/graphics/b/blog/posts/mali-performance-2-how-to-correctly-handle-framebuffers
var cmd = new CommandBuffer() { name = "Clear" };
cmd.ClearRenderTarget(true, true, camera.backgroundColor);
context.ExecuteCommandBuffer(cmd);
cmd.Dispose();
// Setup light and shadow shader constants
SetupLightShaderVariables(visibleLights, pixelLightsCount, vertexLightsCount, context);
if (shadowsRendered)
SetupShadowShaderVariables(context, m_ShadowCasterCascadesCount);
// Render Opaques
var settings = new DrawRendererSettings(cull, camera, m_ForwardBasePassName);
settings.sorting.flags = SortFlags.CommonOpaque;
settings.inputFilter.SetQueuesOpaque();
if (m_Asset.EnableLightmap)
settings.rendererConfiguration |= RendererConfiguration.PerObjectLightmaps;
if (m_Asset.EnableAmbientProbe)
settings.rendererConfiguration |= RendererConfiguration.PerObjectLightProbe;
context.DrawRenderers(ref settings);
// Release temporary RT
var discardRT = new CommandBuffer();
discardRT.ReleaseTemporaryRT(m_ShadowMapProperty);
context.ExecuteCommandBuffer(discardRT);
discardRT.Dispose();
// TODO: Check skybox shader
context.DrawSkybox(camera);
// Render Alpha blended
settings.sorting.flags = SortFlags.CommonTransparent;
settings.inputFilter.SetQueuesTransparent();
context.DrawRenderers(ref settings);
}
context.Submit();
Shader.globalRenderPipeline = prevPipe;
}
private void BuildShadowSettings()
{
m_ShadowSettings = ShadowSettings.Default;
m_ShadowSettings.directionalLightCascadeCount = m_Asset.CascadeCount;
m_ShadowSettings.shadowAtlasWidth = m_Asset.ShadowAtlasResolution;
m_ShadowSettings.shadowAtlasHeight = m_Asset.ShadowAtlasResolution;
m_ShadowSettings.maxShadowDistance = m_Asset.ShadowDistance;
switch (m_ShadowSettings.directionalLightCascadeCount)
{
case 1:
m_ShadowSettings.directionalLightCascades = new Vector3(1.0f, 0.0f, 0.0f);
break;
case 2:
m_ShadowSettings.directionalLightCascades = new Vector3(m_Asset.Cascade2Split, 1.0f, 0.0f);
break;
default:
m_ShadowSettings.directionalLightCascades = m_Asset.Cascade4Split;
break;
}
}
private void GetMaxSupportedLights(int lightsCount, out int pixelLightsCount, out int vertexLightsCount)
{
pixelLightsCount = Mathf.Min(lightsCount, m_Asset.MaxSupportedPixelLights);
vertexLightsCount = (m_Asset.SupportsVertexLight) ? Mathf.Min(lightsCount - pixelLightsCount, kMaxVertexLights) : 0;
}
private void SetupLightShaderVariables(VisibleLight[] lights, int pixelLightCount, int vertexLightCount, ScriptableRenderContext context)
{
int totalLightCount = pixelLightCount + vertexLightCount;
if (lights.Length <= 0)
return;
for (int i = 0; i < totalLightCount; ++i)
{
VisibleLight currLight = lights[i];
if (currLight.lightType == LightType.Directional)
{
Vector4 dir = -currLight.localToWorld.GetColumn(2);
m_LightPositions[i] = new Vector4(dir.x, dir.y, dir.z, 0.0f);
}
else
{
Vector4 pos = currLight.localToWorld.GetColumn(3);
m_LightPositions[i] = new Vector4(pos.x, pos.y, pos.z, 1.0f);
}
m_LightColors[i] = currLight.finalColor;
float rangeSq = currLight.range*currLight.range;
float quadAtten = (currLight.lightType == LightType.Directional) ? 0.0f : 25.0f/rangeSq;
if (currLight.lightType == LightType.Spot)
{
Vector4 dir = currLight.localToWorld.GetColumn(2);
m_LightSpotDirections[i] = new Vector4(-dir.x, -dir.y, -dir.z, 0.0f);
float spotAngle = Mathf.Deg2Rad*currLight.spotAngle;
float cosOuterAngle = Mathf.Cos(spotAngle*0.5f);
float cosInneAngle = Mathf.Cos(spotAngle*0.25f);
float angleRange = cosInneAngle - cosOuterAngle;
m_LightAttenuations[i] = new Vector4(cosOuterAngle,
Mathf.Approximately(angleRange, 0.0f) ? 1.0f : angleRange, quadAtten, rangeSq);
}
else
{
m_LightSpotDirections[i] = new Vector4(0.0f, 0.0f, 1.0f, 0.0f);
m_LightAttenuations[i] = new Vector4(-1.0f, 1.0f, quadAtten, rangeSq);
}
}
CommandBuffer cmd = new CommandBuffer() {name = "SetupShadowShaderConstants"};
cmd.SetGlobalVectorArray("globalLightPos", m_LightPositions);
cmd.SetGlobalVectorArray("globalLightColor", m_LightColors);
cmd.SetGlobalVectorArray("globalLightAtten", m_LightAttenuations);
cmd.SetGlobalVectorArray("globalLightSpotDir", m_LightSpotDirections);
cmd.SetGlobalVector("globalLightCount", new Vector4(pixelLightCount, totalLightCount, 0.0f, 0.0f));
SetShaderKeywords(cmd);
context.ExecuteCommandBuffer(cmd);
cmd.Dispose();
}
private bool RenderShadows(CullResults cullResults, VisibleLight shadowLight, ScriptableRenderContext context)
{
m_ShadowCasterCascadesCount = m_ShadowSettings.directionalLightCascadeCount;
if (shadowLight.lightType == LightType.Spot)
m_ShadowCasterCascadesCount = 1;
int shadowResolution = GetMaxTileResolutionInAtlas(m_ShadowSettings.shadowAtlasWidth, m_ShadowSettings.shadowAtlasHeight, m_ShadowCasterCascadesCount);
Bounds bounds;
if (!cullResults.GetShadowCasterBounds(m_ShadowLightIndex, out bounds))
return false;
var setRenderTargetCommandBuffer = new CommandBuffer();
setRenderTargetCommandBuffer.name = "Render packed shadows";
setRenderTargetCommandBuffer.GetTemporaryRT(m_ShadowMapProperty, m_ShadowSettings.shadowAtlasWidth,
m_ShadowSettings.shadowAtlasHeight, m_DepthBufferBits, FilterMode.Bilinear, RenderTextureFormat.Depth,
RenderTextureReadWrite.Linear);
setRenderTargetCommandBuffer.SetRenderTarget(m_ShadowMapRTID);
setRenderTargetCommandBuffer.ClearRenderTarget(true, true, Color.black);
context.ExecuteCommandBuffer(setRenderTargetCommandBuffer);
setRenderTargetCommandBuffer.Dispose();
float shadowNearPlane = m_Asset.ShadowNearOffset;
Vector3 splitRatio = m_ShadowSettings.directionalLightCascades;
Vector3 lightDir = Vector3.Normalize(shadowLight.light.transform.forward);
Matrix4x4 view, proj;
var settings = new DrawShadowsSettings(cullResults, m_ShadowLightIndex);
bool needRendering = false;
if (shadowLight.lightType == LightType.Spot)
{
needRendering = cullResults.ComputeSpotShadowMatricesAndCullingPrimitives(m_ShadowLightIndex, out view, out proj,
out settings.splitData);
if (!needRendering)
return false;
SetupShadowSliceTransform(0, shadowResolution, proj, view);
RenderShadowSlice(ref context, lightDir, 0, proj, view, settings);
}
else if (shadowLight.lightType == LightType.Directional)
{
for (int cascadeIdx = 0; cascadeIdx < m_ShadowCasterCascadesCount; ++cascadeIdx)
{
needRendering = cullResults.ComputeDirectionalShadowMatricesAndCullingPrimitives(m_ShadowLightIndex,
cascadeIdx, m_ShadowCasterCascadesCount, splitRatio, shadowResolution, shadowNearPlane, out view, out proj,
out settings.splitData);
m_DirectionalShadowSplitDistances[cascadeIdx] = settings.splitData.cullingSphere;
m_DirectionalShadowSplitDistances[cascadeIdx].w *= settings.splitData.cullingSphere.w;
if (!needRendering)
return false;
SetupShadowSliceTransform(cascadeIdx, shadowResolution, proj, view);
RenderShadowSlice(ref context, lightDir, cascadeIdx, proj, view, settings);
}
}
else
{
Debug.LogWarning("Only spot and directional shadow casters are supported in lowend mobile pipeline");
return false;
}
return true;
}
private void SetupShadowSliceTransform(int cascadeIndex, int shadowResolution, Matrix4x4 proj, Matrix4x4 view)
{
// Assumes MAX_CASCADES = 4
m_ShadowSlices[cascadeIndex].atlasX = (cascadeIndex%2)*shadowResolution;
m_ShadowSlices[cascadeIndex].atlasY = (cascadeIndex/2)*shadowResolution;
m_ShadowSlices[cascadeIndex].shadowResolution = shadowResolution;
m_ShadowSlices[cascadeIndex].shadowTransform = Matrix4x4.identity;
var matScaleBias = Matrix4x4.identity;
matScaleBias.m00 = 0.5f;
matScaleBias.m11 = 0.5f;
matScaleBias.m22 = 0.5f;
matScaleBias.m03 = 0.5f;
matScaleBias.m23 = 0.5f;
matScaleBias.m13 = 0.5f;
// Later down the pipeline the proj matrix will be scaled to reverse-z in case of DX.
// We need account for that scale in the shadowTransform.
if (SystemInfo.usesReversedZBuffer)
matScaleBias.m22 = -0.5f;
var matTile = Matrix4x4.identity;
matTile.m00 = (float) m_ShadowSlices[cascadeIndex].shadowResolution/
(float) m_ShadowSettings.shadowAtlasWidth;
matTile.m11 = (float) m_ShadowSlices[cascadeIndex].shadowResolution/
(float) m_ShadowSettings.shadowAtlasHeight;
matTile.m03 = (float) m_ShadowSlices[cascadeIndex].atlasX/(float) m_ShadowSettings.shadowAtlasWidth;
matTile.m13 = (float) m_ShadowSlices[cascadeIndex].atlasY/(float) m_ShadowSettings.shadowAtlasHeight;
m_ShadowSlices[cascadeIndex].shadowTransform = matTile*matScaleBias*proj*view;
}
private void RenderShadowSlice(ref ScriptableRenderContext context, Vector3 lightDir, int cascadeIndex,
Matrix4x4 proj, Matrix4x4 view, DrawShadowsSettings settings)
{
var buffer = new CommandBuffer() {name = "Prepare Shadowmap Slice"};
buffer.SetViewport(new Rect(m_ShadowSlices[cascadeIndex].atlasX, m_ShadowSlices[cascadeIndex].atlasY,
m_ShadowSlices[cascadeIndex].shadowResolution, m_ShadowSlices[cascadeIndex].shadowResolution));
buffer.SetViewProjectionMatrices(view, proj);
buffer.SetGlobalVector("_WorldLightDirAndBias",
new Vector4(-lightDir.x, -lightDir.y, -lightDir.z, m_Asset.ShadowBias));
context.ExecuteCommandBuffer(buffer);
buffer.Dispose();
context.DrawShadows(ref settings);
}
private int GetMaxTileResolutionInAtlas(int atlasWidth, int atlasHeight, int tileCount)
{
int resolution = Mathf.Min(atlasWidth, atlasHeight);
if (tileCount > Mathf.Log(resolution))
{
Debug.LogError(
String.Format(
"Cannot fit {0} tiles into current shadowmap atlas of size ({1}, {2}). ShadowMap Resolution set to zero.",
tileCount, atlasWidth, atlasHeight));
return 0;
}
int currentTileCount = atlasWidth/resolution*atlasHeight/resolution;
while (currentTileCount < tileCount)
{
resolution = resolution >> 1;
currentTileCount = atlasWidth/resolution*atlasHeight/resolution;
}
return resolution;
}
void SetupShadowShaderVariables(ScriptableRenderContext context, int cascadeCount)
{
float shadowResolution = m_ShadowSlices[0].shadowResolution;
const int maxShadowCascades = 4;
Matrix4x4[] shadowMatrices = new Matrix4x4[maxShadowCascades];
for (int i = 0; i < cascadeCount; ++i)
shadowMatrices[i] = (cascadeCount >= i) ? m_ShadowSlices[i].shadowTransform : Matrix4x4.identity;
// TODO: shadow resolution per cascade in case cascades endup being supported.
float invShadowResolution = 1.0f/shadowResolution;
float[] pcfKernel =
{
-0.5f*invShadowResolution, 0.5f*invShadowResolution,
0.5f*invShadowResolution, 0.5f*invShadowResolution,
-0.5f*invShadowResolution, -0.5f*invShadowResolution,
0.5f*invShadowResolution, -0.5f*invShadowResolution
};
var setupShadow = new CommandBuffer() {name = "SetupShadowShaderConstants"};
setupShadow.SetGlobalMatrixArray("_WorldToShadow", shadowMatrices);
setupShadow.SetGlobalVectorArray("_DirShadowSplitSpheres", m_DirectionalShadowSplitDistances);
setupShadow.SetGlobalFloatArray("_PCFKernel", pcfKernel);
context.ExecuteCommandBuffer(setupShadow);
setupShadow.Dispose();
}
void SetShaderKeywords(CommandBuffer cmd)
{
if (m_Asset.SupportsVertexLight)
cmd.EnableShaderKeyword("_VERTEX_LIGHTS");
else
cmd.DisableShaderKeyword("_VERTEX_LIGHTS");
if (m_ShadowCasterCascadesCount == 1)
cmd.DisableShaderKeyword("_SHADOW_CASCADES");
else
cmd.EnableShaderKeyword("_SHADOW_CASCADES");
ShadowType shadowType = (m_ShadowLightIndex != -1) ? m_Asset.CurrShadowType : ShadowType.NO_SHADOW;
switch (shadowType)
{
case ShadowType.NO_SHADOW:
cmd.DisableShaderKeyword("HARD_SHADOWS");
cmd.DisableShaderKeyword("SOFT_SHADOWS");
break;
case ShadowType.HARD_SHADOWS:
cmd.EnableShaderKeyword("HARD_SHADOWS");
cmd.DisableShaderKeyword("SOFT_SHADOWS");
break;
case ShadowType.SOFT_SHADOWS:
cmd.DisableShaderKeyword("HARD_SHADOWS");
cmd.EnableShaderKeyword("SOFT_SHADOWS");
break;
}
}
// Finds main light and main shadow casters and places them in the beginning of array.
// Sort the remaining array based on custom IComparer criteria.
private void SortLights(ref VisibleLight[] lights, int pixelLightsCount)
{
m_ShadowLightIndex = -1;
if (lights.Length == 0)
return;
bool shadowsSupported = m_Asset.CurrShadowType != ShadowType.NO_SHADOW && pixelLightsCount > 0;
int mainLightIndex = -1;
for (int i = 0; i < lights.Length; ++i)
{
VisibleLight currLight = lights[i];
if (currLight.lightType == LightType.Directional)
if (mainLightIndex == -1 || currLight.light.intensity > lights[mainLightIndex].light.intensity)
mainLightIndex = i;
if (shadowsSupported && (currLight.light.shadows != LightShadows.None) && IsSupportedShadowType(currLight.lightType))
// Prefer directional shadows, if not sort by intensity
if (m_ShadowLightIndex == -1 || currLight.lightType > lights[m_ShadowLightIndex].lightType)
m_ShadowLightIndex = i;
}
// If supports a single directional light only, main light is main shadow light.
if (pixelLightsCount == 1 && m_ShadowLightIndex > -1)
mainLightIndex = m_ShadowLightIndex;
int startIndex = 0;
if (mainLightIndex > -1)
{
SwapLights(ref lights, 0, mainLightIndex);
startIndex++;
}
if (mainLightIndex != m_ShadowLightIndex && m_ShadowLightIndex > 0)
{
SwapLights(ref lights, 1, m_ShadowLightIndex);
m_ShadowLightIndex = 1;
startIndex++;
}
Array.Sort(lights, startIndex, lights.Length - startIndex, this);
}
private bool IsSupportedShadowType(LightType type)
{
return (type == LightType.Directional || type == LightType.Spot);
}
private void SwapLights(ref VisibleLight[] lights, int lhsIndex, int rhsIndex)
{
if (lhsIndex == rhsIndex)
return;
VisibleLight temp = lights[lhsIndex];
lights[lhsIndex] = lights[rhsIndex];
lights[rhsIndex] = temp;
}
// Prioritizes Spot and Point lights by intensity. If any directional light, it will be the main
// light and will not be considered in the computation.
// TODO: Move to a better sorting solution, e.g, prioritize lights per object.
public int Compare(VisibleLight lhs, VisibleLight rhs)
{
int lhsLightTypePriority = m_LightTypePriority[(int) lhs.lightType];
int rhsLightTypePriority = m_LightTypePriority[(int) rhs.lightType];
if (lhsLightTypePriority != rhsLightTypePriority)
return rhsLightTypePriority - lhsLightTypePriority;
return (int) (rhs.light.intensity - lhs.light.intensity);
}
}
}

25
Assets/LowEndMobilePipeline/LowEndMobilePipelineAsset.asset


%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: bf2edee5c58d82540a51f03df9d42094, type: 3}
m_Name: LowEndMobilePipelineAsset
m_EditorClassIdentifier:
m_MaxPixelLights: 1
m_SupportsVertexLight: 1
m_EnableLightmaps: 1
m_EnableAmbientProbe: 1
m_ShadowType: 1
m_ShadowAtlasResolution: 1024
m_ShadowNearPlaneOffset: 2
m_ShadowDistance: 50
m_ShadowBias: 0.05
m_ShadowCascades: 1
m_Cascade2Split: 0.25
m_Cascade4Split: {x: 0.067, y: 0.2, z: 0.467}

9
Assets/Plugins/Android.meta


fileFormatVersion: 2
guid: 0be2592e2cf8b3341840431d32963e7c
folderAsset: yes
timeCreated: 1484737178
licenseType: Pro
DefaultImporter:
userData:
assetBundleName:
assetBundleVariant:

部分文件因为文件数量过多而无法显示

正在加载...
取消
保存