From 700d0fa03e788150a16e05d26157eba4e8a944eb Mon Sep 17 00:00:00 2001 From: "lele.feng" Date: Wed, 30 Aug 2017 19:52:12 +0800 Subject: [PATCH 1/4] [Upgrade] upgrade from unity 5.3 to unity 5.4 --- Assets/Scripts/Chapter12/PostEffectsBase.cs | 4 ++-- .../Scripts/Chapter13/FogWithDepthTexture.cs | 2 +- .../Chapter13/MotionBlurWithDepthTexture.cs | 2 +- Assets/Scripts/Chapter15/FogWithNoise.cs | 2 +- .../Chapter10/Chapter10-Fresnel.shader | 4 ++-- .../Chapter10-GlassRefraction.shader | 4 ++-- .../Shaders/Chapter10/Chapter10-Mirror.shader | 4 +++- .../Chapter10/Chapter10-Reflection.shader | 4 ++-- .../Chapter10/Chapter10-Refraction.shader | 4 ++-- .../Chapter11/Chapter11-Billboard.shader | 4 ++-- .../Chapter11-ImageSequenceAnimation.shader | 2 +- .../Chapter11-ScrollingBackground.shader | 2 +- ...Chapter11-VertexAnimationWIthShadow.shader | 2 +- .../Shaders/Chapter11/Chapter11-Water.shader | 2 +- .../Shaders/Chapter12/Chapter12-Bloom.shader | 4 ++-- ...r12-BrightnessSaturationAndContrast.shader | 2 +- .../Chapter12/Chapter12-EdgeDetection.shader | 2 +- .../Chapter12/Chapter12-GaussianBlur.shader | 4 ++-- .../Chapter12/Chapter12-MotionBlur.shader | 2 +- .../Chapter13-EdgeDetectNormalAndDepth.shader | 2 +- .../Chapter13-FogWithDepthTexture.shader | 2 +- ...hapter13-MotionBlurWithDepthTexture.shader | 2 +- .../Chapter14/Chapter14-Hatching.shader | 4 ++-- .../Chapter14/Chapter14-ToonShading.shader | 4 ++-- .../Chapter15/Chapter15-Dissolve.shader | 4 ++-- .../Chapter15/Chapter15-FogWithNoise.shader | 2 +- .../Chapter15/Chapter15-WaterWave.shader | 4 ++-- Assets/Shaders/Chapter18/SimpleBlend.shader | 2 +- .../Chapter5/Chapter5-FalseColor.shader | 2 +- .../Chapter5/Chapter5-SimpleShader.shader | 4 +++- .../Chapter6/Chapter6-BlinnPhong.shader | 6 +++--- ...pter6-BlinnPhongUseBuildInFunctions.shader | 4 ++-- .../Chapter6-DiffusePixelLevel.shader | 4 ++-- .../Chapter6-DiffuseVertexLevel.shader | 4 ++-- .../Chapter6/Chapter6-HalfLambert.shader | 4 ++-- .../Chapter6-SpecularPixelLevel.shader | 6 +++--- .../Chapter6-SpecularVertexLevel.shader | 6 +++--- .../Chapter7/Chapter7-MaskTexture.shader | 2 +- .../Chapter7-NormalMapTangentSpace.shader | 2 +- .../Chapter7-NormalMapWorldSpace.shader | 4 ++-- .../Chapter7/Chapter7-RampTexture.shader | 4 ++-- .../Chapter7/Chapter7-SingleTexture.shader | 4 ++-- .../Chapter7-TextureProperties.shader | 2 +- .../Chapter8/Chapter8-AlphaBlend.shader | 4 ++-- .../Chapter8-AlphaBlendBothSided.shader | 8 ++++---- .../Chapter8/Chapter8-AlphaBlendZWrite.shader | 4 ++-- .../Chapter8/Chapter8-AlphaTest.shader | 4 ++-- .../Chapter8-AlphaTestBothSided.shader | 4 ++-- .../Chapter8-BlendOperations 1.shader | 2 +- .../Chapter8/Chapter8-BlendOperations.shader | 2 +- .../Chapter9-AlphaBlendWithShadow.shader | 4 ++-- .../Chapter9-AlphaTestWithShadow.shader | 4 ++-- ...nuationAndShadowUseBuildInFunctions.shader | 8 ++++---- .../Chapter9/Chapter9-ForwardRendering.shader | 12 ++++++------ .../Shaders/Chapter9/Chapter9-Shadow.shader | 10 +++++----- Assets/Shaders/Common/BumpedDiffuse.shader | 8 ++++---- Assets/Shaders/Common/BumpedSpecular.shader | 8 ++++---- ProjectSettings/ProjectSettings.asset | Bin 38069 -> 52294 bytes ProjectSettings/ProjectVersion.txt | 3 +-- 59 files changed, 114 insertions(+), 111 deletions(-) diff --git a/Assets/Scripts/Chapter12/PostEffectsBase.cs b/Assets/Scripts/Chapter12/PostEffectsBase.cs index a6962b32..3b592af6 100644 --- a/Assets/Scripts/Chapter12/PostEffectsBase.cs +++ b/Assets/Scripts/Chapter12/PostEffectsBase.cs @@ -16,8 +16,8 @@ protected void CheckResources() { // Called in CheckResources to check support on this platform protected bool CheckSupport() { - if (SystemInfo.supportsImageEffects == false || SystemInfo.supportsRenderTextures == false) { - Debug.LogWarning("This platform does not support image effects or render textures."); + if (SystemInfo.supportsImageEffects == false) { + Debug.LogWarning("This platform does not support image effects."); return false; } diff --git a/Assets/Scripts/Chapter13/FogWithDepthTexture.cs b/Assets/Scripts/Chapter13/FogWithDepthTexture.cs index a897e151..ac25579d 100644 --- a/Assets/Scripts/Chapter13/FogWithDepthTexture.cs +++ b/Assets/Scripts/Chapter13/FogWithDepthTexture.cs @@ -14,7 +14,7 @@ public Material material { } private Camera myCamera; - public Camera camera { + public new Camera camera { get { if (myCamera == null) { myCamera = GetComponent(); diff --git a/Assets/Scripts/Chapter13/MotionBlurWithDepthTexture.cs b/Assets/Scripts/Chapter13/MotionBlurWithDepthTexture.cs index 3a5030d1..47998e61 100644 --- a/Assets/Scripts/Chapter13/MotionBlurWithDepthTexture.cs +++ b/Assets/Scripts/Chapter13/MotionBlurWithDepthTexture.cs @@ -14,7 +14,7 @@ public Material material { } private Camera myCamera; - public Camera camera { + public new Camera camera { get { if (myCamera == null) { myCamera = GetComponent(); diff --git a/Assets/Scripts/Chapter15/FogWithNoise.cs b/Assets/Scripts/Chapter15/FogWithNoise.cs index 0eac4846..73ee8c54 100644 --- a/Assets/Scripts/Chapter15/FogWithNoise.cs +++ b/Assets/Scripts/Chapter15/FogWithNoise.cs @@ -14,7 +14,7 @@ public Material material { } private Camera myCamera; - public Camera camera { + public new Camera camera { get { if (myCamera == null) { myCamera = GetComponent(); diff --git a/Assets/Shaders/Chapter10/Chapter10-Fresnel.shader b/Assets/Shaders/Chapter10/Chapter10-Fresnel.shader index 0feb85fc..d8c8b0be 100644 --- a/Assets/Shaders/Chapter10/Chapter10-Fresnel.shader +++ b/Assets/Shaders/Chapter10/Chapter10-Fresnel.shader @@ -40,11 +40,11 @@ v2f vert(a2v v) { v2f o; - o.pos = mul(UNITY_MATRIX_MVP, v.vertex); + o.pos = UnityObjectToClipPos(v.vertex); o.worldNormal = UnityObjectToWorldNormal(v.normal); - o.worldPos = mul(_Object2World, v.vertex).xyz; + o.worldPos = mul(unity_ObjectToWorld, v.vertex).xyz; o.worldViewDir = UnityWorldSpaceViewDir(o.worldPos); diff --git a/Assets/Shaders/Chapter10/Chapter10-GlassRefraction.shader b/Assets/Shaders/Chapter10/Chapter10-GlassRefraction.shader index f2a4e995..fd65f6d4 100644 --- a/Assets/Shaders/Chapter10/Chapter10-GlassRefraction.shader +++ b/Assets/Shaders/Chapter10/Chapter10-GlassRefraction.shader @@ -50,14 +50,14 @@ v2f vert (a2v v) { v2f o; - o.pos = mul(UNITY_MATRIX_MVP, v.vertex); + o.pos = UnityObjectToClipPos(v.vertex); o.scrPos = ComputeGrabScreenPos(o.pos); o.uv.xy = TRANSFORM_TEX(v.texcoord, _MainTex); o.uv.zw = TRANSFORM_TEX(v.texcoord, _BumpMap); - float3 worldPos = mul(_Object2World, v.vertex).xyz; + float3 worldPos = mul(unity_ObjectToWorld, v.vertex).xyz; fixed3 worldNormal = UnityObjectToWorldNormal(v.normal); fixed3 worldTangent = UnityObjectToWorldDir(v.tangent.xyz); fixed3 worldBinormal = cross(worldNormal, worldTangent) * v.tangent.w; diff --git a/Assets/Shaders/Chapter10/Chapter10-Mirror.shader b/Assets/Shaders/Chapter10/Chapter10-Mirror.shader index c162714b..e45ddc75 100644 --- a/Assets/Shaders/Chapter10/Chapter10-Mirror.shader +++ b/Assets/Shaders/Chapter10/Chapter10-Mirror.shader @@ -10,6 +10,8 @@ #pragma vertex vert #pragma fragment frag + + #include "UnityCG.cginc" sampler2D _MainTex; @@ -25,7 +27,7 @@ v2f vert(a2v v) { v2f o; - o.pos = mul(UNITY_MATRIX_MVP, v.vertex); + o.pos = UnityObjectToClipPos(v.vertex); o.uv = v.texcoord; // Mirror needs to filp x diff --git a/Assets/Shaders/Chapter10/Chapter10-Reflection.shader b/Assets/Shaders/Chapter10/Chapter10-Reflection.shader index 4d5ee8c8..b73eeed8 100644 --- a/Assets/Shaders/Chapter10/Chapter10-Reflection.shader +++ b/Assets/Shaders/Chapter10/Chapter10-Reflection.shader @@ -43,11 +43,11 @@ v2f vert(a2v v) { v2f o; - o.pos = mul(UNITY_MATRIX_MVP, v.vertex); + o.pos = UnityObjectToClipPos(v.vertex); o.worldNormal = UnityObjectToWorldNormal(v.normal); - o.worldPos = mul(_Object2World, v.vertex).xyz; + o.worldPos = mul(unity_ObjectToWorld, v.vertex).xyz; o.worldViewDir = UnityWorldSpaceViewDir(o.worldPos); diff --git a/Assets/Shaders/Chapter10/Chapter10-Refraction.shader b/Assets/Shaders/Chapter10/Chapter10-Refraction.shader index 0bdd6641..9031d835 100644 --- a/Assets/Shaders/Chapter10/Chapter10-Refraction.shader +++ b/Assets/Shaders/Chapter10/Chapter10-Refraction.shader @@ -44,11 +44,11 @@ v2f vert(a2v v) { v2f o; - o.pos = mul(UNITY_MATRIX_MVP, v.vertex); + o.pos = UnityObjectToClipPos(v.vertex); o.worldNormal = UnityObjectToWorldNormal(v.normal); - o.worldPos = mul(_Object2World, v.vertex).xyz; + o.worldPos = mul(unity_ObjectToWorld, v.vertex).xyz; o.worldViewDir = UnityWorldSpaceViewDir(o.worldPos); diff --git a/Assets/Shaders/Chapter11/Chapter11-Billboard.shader b/Assets/Shaders/Chapter11/Chapter11-Billboard.shader index 59340868..336f560e 100644 --- a/Assets/Shaders/Chapter11/Chapter11-Billboard.shader +++ b/Assets/Shaders/Chapter11/Chapter11-Billboard.shader @@ -42,7 +42,7 @@ // Suppose the center in object space is fixed float3 center = float3(0, 0, 0); - float3 viewer = mul(_World2Object,float4(_WorldSpaceCameraPos, 1)); + float3 viewer = mul(unity_WorldToObject,float4(_WorldSpaceCameraPos, 1)); float3 normalDir = viewer - center; // If _VerticalBillboarding equals 1, we use the desired view dir as the normal dir @@ -61,7 +61,7 @@ float3 centerOffs = v.vertex.xyz - center; float3 localPos = center + rightDir * centerOffs.x + upDir * centerOffs.y + normalDir * centerOffs.z; - o.pos = mul(UNITY_MATRIX_MVP, float4(localPos, 1)); + o.pos = UnityObjectToClipPos(float4(localPos, 1)); o.uv = TRANSFORM_TEX(v.texcoord,_MainTex); return o; diff --git a/Assets/Shaders/Chapter11/Chapter11-ImageSequenceAnimation.shader b/Assets/Shaders/Chapter11/Chapter11-ImageSequenceAnimation.shader index c2337494..44189663 100644 --- a/Assets/Shaders/Chapter11/Chapter11-ImageSequenceAnimation.shader +++ b/Assets/Shaders/Chapter11/Chapter11-ImageSequenceAnimation.shader @@ -41,7 +41,7 @@ v2f vert (a2v v) { v2f o; - o.pos = mul(UNITY_MATRIX_MVP, v.vertex); + o.pos = UnityObjectToClipPos(v.vertex); o.uv = TRANSFORM_TEX(v.texcoord, _MainTex); return o; } diff --git a/Assets/Shaders/Chapter11/Chapter11-ScrollingBackground.shader b/Assets/Shaders/Chapter11/Chapter11-ScrollingBackground.shader index d9a37f21..d2792c42 100644 --- a/Assets/Shaders/Chapter11/Chapter11-ScrollingBackground.shader +++ b/Assets/Shaders/Chapter11/Chapter11-ScrollingBackground.shader @@ -39,7 +39,7 @@ v2f vert (a2v v) { v2f o; - o.pos = mul(UNITY_MATRIX_MVP, v.vertex); + o.pos = UnityObjectToClipPos(v.vertex); o.uv.xy = TRANSFORM_TEX(v.texcoord, _MainTex) + frac(float2(_ScrollX, 0.0) * _Time.y); o.uv.zw = TRANSFORM_TEX(v.texcoord, _DetailTex) + frac(float2(_Scroll2X, 0.0) * _Time.y); diff --git a/Assets/Shaders/Chapter11/Chapter11-VertexAnimationWIthShadow.shader b/Assets/Shaders/Chapter11/Chapter11-VertexAnimationWIthShadow.shader index acca610a..84784262 100644 --- a/Assets/Shaders/Chapter11/Chapter11-VertexAnimationWIthShadow.shader +++ b/Assets/Shaders/Chapter11/Chapter11-VertexAnimationWIthShadow.shader @@ -46,7 +46,7 @@ float4 offset; offset.yzw = float3(0.0, 0.0, 0.0); offset.x = sin(_Frequency * _Time.y + v.vertex.x * _InvWaveLength + v.vertex.y * _InvWaveLength + v.vertex.z * _InvWaveLength) * _Magnitude; - o.pos = mul(UNITY_MATRIX_MVP, v.vertex + offset); + o.pos = UnityObjectToClipPos(v.vertex + offset); o.uv = TRANSFORM_TEX(v.texcoord, _MainTex); o.uv += float2(0.0, _Time.y * _Speed); diff --git a/Assets/Shaders/Chapter11/Chapter11-Water.shader b/Assets/Shaders/Chapter11/Chapter11-Water.shader index ac9c3411..12bec03e 100644 --- a/Assets/Shaders/Chapter11/Chapter11-Water.shader +++ b/Assets/Shaders/Chapter11/Chapter11-Water.shader @@ -48,7 +48,7 @@ Shader "Unity Shaders Book/Chapter 11/Water" { float4 offset; offset.yzw = float3(0.0, 0.0, 0.0); offset.x = sin(_Frequency * _Time.y + v.vertex.x * _InvWaveLength + v.vertex.y * _InvWaveLength + v.vertex.z * _InvWaveLength) * _Magnitude; - o.pos = mul(UNITY_MATRIX_MVP, v.vertex + offset); + o.pos = UnityObjectToClipPos(v.vertex + offset); o.uv = TRANSFORM_TEX(v.texcoord, _MainTex); o.uv += float2(0.0, _Time.y * _Speed); diff --git a/Assets/Shaders/Chapter12/Chapter12-Bloom.shader b/Assets/Shaders/Chapter12/Chapter12-Bloom.shader index 308dc181..7ba38158 100644 --- a/Assets/Shaders/Chapter12/Chapter12-Bloom.shader +++ b/Assets/Shaders/Chapter12/Chapter12-Bloom.shader @@ -24,7 +24,7 @@ v2f vertExtractBright(appdata_img v) { v2f o; - o.pos = mul(UNITY_MATRIX_MVP, v.vertex); + o.pos = UnityObjectToClipPos(v.vertex); o.uv = v.texcoord; @@ -50,7 +50,7 @@ v2fBloom vertBloom(appdata_img v) { v2fBloom o; - o.pos = mul (UNITY_MATRIX_MVP, v.vertex); + o.pos = UnityObjectToClipPos (v.vertex); o.uv.xy = v.texcoord; o.uv.zw = v.texcoord; diff --git a/Assets/Shaders/Chapter12/Chapter12-BrightnessSaturationAndContrast.shader b/Assets/Shaders/Chapter12/Chapter12-BrightnessSaturationAndContrast.shader index ed475ee5..f91d7bde 100644 --- a/Assets/Shaders/Chapter12/Chapter12-BrightnessSaturationAndContrast.shader +++ b/Assets/Shaders/Chapter12/Chapter12-BrightnessSaturationAndContrast.shader @@ -28,7 +28,7 @@ v2f vert(appdata_img v) { v2f o; - o.pos = mul(UNITY_MATRIX_MVP, v.vertex); + o.pos = UnityObjectToClipPos(v.vertex); o.uv = v.texcoord; diff --git a/Assets/Shaders/Chapter12/Chapter12-EdgeDetection.shader b/Assets/Shaders/Chapter12/Chapter12-EdgeDetection.shader index dc919dee..13296f9c 100644 --- a/Assets/Shaders/Chapter12/Chapter12-EdgeDetection.shader +++ b/Assets/Shaders/Chapter12/Chapter12-EdgeDetection.shader @@ -29,7 +29,7 @@ Shader "Unity Shaders Book/Chapter 12/Edge Detection" { v2f vert(appdata_img v) { v2f o; - o.pos = mul(UNITY_MATRIX_MVP, v.vertex); + o.pos = UnityObjectToClipPos(v.vertex); half2 uv = v.texcoord; diff --git a/Assets/Shaders/Chapter12/Chapter12-GaussianBlur.shader b/Assets/Shaders/Chapter12/Chapter12-GaussianBlur.shader index dd284392..04bd80ce 100644 --- a/Assets/Shaders/Chapter12/Chapter12-GaussianBlur.shader +++ b/Assets/Shaders/Chapter12/Chapter12-GaussianBlur.shader @@ -19,7 +19,7 @@ v2f vertBlurVertical(appdata_img v) { v2f o; - o.pos = mul(UNITY_MATRIX_MVP, v.vertex); + o.pos = UnityObjectToClipPos(v.vertex); half2 uv = v.texcoord; @@ -34,7 +34,7 @@ v2f vertBlurHorizontal(appdata_img v) { v2f o; - o.pos = mul(UNITY_MATRIX_MVP, v.vertex); + o.pos = UnityObjectToClipPos(v.vertex); half2 uv = v.texcoord; diff --git a/Assets/Shaders/Chapter12/Chapter12-MotionBlur.shader b/Assets/Shaders/Chapter12/Chapter12-MotionBlur.shader index a2f09ba8..315d0ca4 100644 --- a/Assets/Shaders/Chapter12/Chapter12-MotionBlur.shader +++ b/Assets/Shaders/Chapter12/Chapter12-MotionBlur.shader @@ -19,7 +19,7 @@ v2f vert(appdata_img v) { v2f o; - o.pos = mul(UNITY_MATRIX_MVP, v.vertex); + o.pos = UnityObjectToClipPos(v.vertex); o.uv = v.texcoord; diff --git a/Assets/Shaders/Chapter13/Chapter13-EdgeDetectNormalAndDepth.shader b/Assets/Shaders/Chapter13/Chapter13-EdgeDetectNormalAndDepth.shader index dd8c5b37..fe322b5b 100644 --- a/Assets/Shaders/Chapter13/Chapter13-EdgeDetectNormalAndDepth.shader +++ b/Assets/Shaders/Chapter13/Chapter13-EdgeDetectNormalAndDepth.shader @@ -29,7 +29,7 @@ v2f vert(appdata_img v) { v2f o; - o.pos = mul(UNITY_MATRIX_MVP, v.vertex); + o.pos = UnityObjectToClipPos(v.vertex); half2 uv = v.texcoord; o.uv[0] = uv; diff --git a/Assets/Shaders/Chapter13/Chapter13-FogWithDepthTexture.shader b/Assets/Shaders/Chapter13/Chapter13-FogWithDepthTexture.shader index a1ca8624..3041d2bd 100644 --- a/Assets/Shaders/Chapter13/Chapter13-FogWithDepthTexture.shader +++ b/Assets/Shaders/Chapter13/Chapter13-FogWithDepthTexture.shader @@ -30,7 +30,7 @@ v2f vert(appdata_img v) { v2f o; - o.pos = mul(UNITY_MATRIX_MVP, v.vertex); + o.pos = UnityObjectToClipPos(v.vertex); o.uv = v.texcoord; o.uv_depth = v.texcoord; diff --git a/Assets/Shaders/Chapter13/Chapter13-MotionBlurWithDepthTexture.shader b/Assets/Shaders/Chapter13/Chapter13-MotionBlurWithDepthTexture.shader index 97fa6573..1f591db7 100644 --- a/Assets/Shaders/Chapter13/Chapter13-MotionBlurWithDepthTexture.shader +++ b/Assets/Shaders/Chapter13/Chapter13-MotionBlurWithDepthTexture.shader @@ -23,7 +23,7 @@ v2f vert(appdata_img v) { v2f o; - o.pos = mul(UNITY_MATRIX_MVP, v.vertex); + o.pos = UnityObjectToClipPos(v.vertex); o.uv = v.texcoord; o.uv_depth = v.texcoord; diff --git a/Assets/Shaders/Chapter14/Chapter14-Hatching.shader b/Assets/Shaders/Chapter14/Chapter14-Hatching.shader index a85600e3..8c31ca17 100644 --- a/Assets/Shaders/Chapter14/Chapter14-Hatching.shader +++ b/Assets/Shaders/Chapter14/Chapter14-Hatching.shader @@ -63,7 +63,7 @@ Shader "Unity Shaders Book/Chapter 14/Hatching" { v2f vert(a2v v) { v2f o; - o.pos = mul(UNITY_MATRIX_MVP, v.vertex); + o.pos = UnityObjectToClipPos(v.vertex); o.uv = v.texcoord.xy * _TileFactor; @@ -97,7 +97,7 @@ Shader "Unity Shaders Book/Chapter 14/Hatching" { o.hatchWeights1.z = 1.0 - o.hatchWeights1.y; } - o.worldPos = mul(_Object2World, v.vertex).xyz; + o.worldPos = mul(unity_ObjectToWorld, v.vertex).xyz; TRANSFER_SHADOW(o); diff --git a/Assets/Shaders/Chapter14/Chapter14-ToonShading.shader b/Assets/Shaders/Chapter14/Chapter14-ToonShading.shader index f4f7c662..ccf09f3a 100644 --- a/Assets/Shaders/Chapter14/Chapter14-ToonShading.shader +++ b/Assets/Shaders/Chapter14/Chapter14-ToonShading.shader @@ -96,10 +96,10 @@ v2f vert (a2v v) { v2f o; - o.pos = mul( UNITY_MATRIX_MVP, v.vertex); + o.pos = UnityObjectToClipPos( v.vertex); o.uv = TRANSFORM_TEX (v.texcoord, _MainTex); o.worldNormal = UnityObjectToWorldNormal(v.normal); - o.worldPos = mul(_Object2World, v.vertex).xyz; + o.worldPos = mul(unity_ObjectToWorld, v.vertex).xyz; TRANSFER_SHADOW(o); diff --git a/Assets/Shaders/Chapter15/Chapter15-Dissolve.shader b/Assets/Shaders/Chapter15/Chapter15-Dissolve.shader index 571cf692..8d91a5c5 100644 --- a/Assets/Shaders/Chapter15/Chapter15-Dissolve.shader +++ b/Assets/Shaders/Chapter15/Chapter15-Dissolve.shader @@ -57,7 +57,7 @@ v2f vert(a2v v) { v2f o; - o.pos = mul(UNITY_MATRIX_MVP, v.vertex); + o.pos = UnityObjectToClipPos(v.vertex); o.uvMainTex = TRANSFORM_TEX(v.texcoord, _MainTex); o.uvBumpMap = TRANSFORM_TEX(v.texcoord, _BumpMap); @@ -66,7 +66,7 @@ TANGENT_SPACE_ROTATION; o.lightDir = mul(rotation, ObjSpaceLightDir(v.vertex)).xyz; - o.worldPos = mul(_Object2World, v.vertex).xyz; + o.worldPos = mul(unity_ObjectToWorld, v.vertex).xyz; TRANSFER_SHADOW(o); diff --git a/Assets/Shaders/Chapter15/Chapter15-FogWithNoise.shader b/Assets/Shaders/Chapter15/Chapter15-FogWithNoise.shader index e4ffbe27..a606fb7d 100644 --- a/Assets/Shaders/Chapter15/Chapter15-FogWithNoise.shader +++ b/Assets/Shaders/Chapter15/Chapter15-FogWithNoise.shader @@ -38,7 +38,7 @@ v2f vert(appdata_img v) { v2f o; - o.pos = mul(UNITY_MATRIX_MVP, v.vertex); + o.pos = UnityObjectToClipPos(v.vertex); o.uv = v.texcoord; o.uv_depth = v.texcoord; diff --git a/Assets/Shaders/Chapter15/Chapter15-WaterWave.shader b/Assets/Shaders/Chapter15/Chapter15-WaterWave.shader index 34461e18..7af2414a 100644 --- a/Assets/Shaders/Chapter15/Chapter15-WaterWave.shader +++ b/Assets/Shaders/Chapter15/Chapter15-WaterWave.shader @@ -59,14 +59,14 @@ v2f vert(a2v v) { v2f o; - o.pos = mul(UNITY_MATRIX_MVP, v.vertex); + o.pos = UnityObjectToClipPos(v.vertex); o.scrPos = ComputeGrabScreenPos(o.pos); o.uv.xy = TRANSFORM_TEX(v.texcoord, _MainTex); o.uv.zw = TRANSFORM_TEX(v.texcoord, _WaveMap); - float3 worldPos = mul(_Object2World, v.vertex).xyz; + float3 worldPos = mul(unity_ObjectToWorld, v.vertex).xyz; fixed3 worldNormal = UnityObjectToWorldNormal(v.normal); fixed3 worldTangent = UnityObjectToWorldDir(v.tangent.xyz); fixed3 worldBinormal = cross(worldNormal, worldTangent) * v.tangent.w; diff --git a/Assets/Shaders/Chapter18/SimpleBlend.shader b/Assets/Shaders/Chapter18/SimpleBlend.shader index c3f659d2..4d31e077 100644 --- a/Assets/Shaders/Chapter18/SimpleBlend.shader +++ b/Assets/Shaders/Chapter18/SimpleBlend.shader @@ -33,7 +33,7 @@ v2f vert(a2v v) { v2f o; - o.pos = mul(UNITY_MATRIX_MVP, v.vertex); + o.pos = UnityObjectToClipPos(v.vertex); o.uv = TRANSFORM_TEX(v.texcoord, _MainTex); return o; } diff --git a/Assets/Shaders/Chapter5/Chapter5-FalseColor.shader b/Assets/Shaders/Chapter5/Chapter5-FalseColor.shader index eb79c74f..a0786d4c 100644 --- a/Assets/Shaders/Chapter5/Chapter5-FalseColor.shader +++ b/Assets/Shaders/Chapter5/Chapter5-FalseColor.shader @@ -15,7 +15,7 @@ v2f vert(appdata_full v) { v2f o; - o.pos = mul(UNITY_MATRIX_MVP, v.vertex); + o.pos = UnityObjectToClipPos(v.vertex); // Visualize normal o.color = fixed4(v.normal * 0.5 + fixed3(0.5, 0.5, 0.5), 1.0); diff --git a/Assets/Shaders/Chapter5/Chapter5-SimpleShader.shader b/Assets/Shaders/Chapter5/Chapter5-SimpleShader.shader index 03f7daf0..0142b248 100644 --- a/Assets/Shaders/Chapter5/Chapter5-SimpleShader.shader +++ b/Assets/Shaders/Chapter5/Chapter5-SimpleShader.shader @@ -6,6 +6,8 @@ Pass { CGPROGRAM + #include "UnityCG.cginc" + #pragma vertex vert #pragma fragment frag @@ -24,7 +26,7 @@ v2f vert(a2v v) { v2f o; - o.pos = mul(UNITY_MATRIX_MVP, v.vertex); + o.pos = UnityObjectToClipPos(v.vertex); o.color = v.normal * 0.5 + fixed3(0.5, 0.5, 0.5); return o; } diff --git a/Assets/Shaders/Chapter6/Chapter6-BlinnPhong.shader b/Assets/Shaders/Chapter6/Chapter6-BlinnPhong.shader index 808f005b..a5337c1c 100644 --- a/Assets/Shaders/Chapter6/Chapter6-BlinnPhong.shader +++ b/Assets/Shaders/Chapter6/Chapter6-BlinnPhong.shader @@ -33,13 +33,13 @@ v2f vert(a2v v) { v2f o; // Transform the vertex from object space to projection space - o.pos = mul(UNITY_MATRIX_MVP, v.vertex); + o.pos = UnityObjectToClipPos(v.vertex); // Transform the normal from object space to world space - o.worldNormal = mul(v.normal, (float3x3)_World2Object); + o.worldNormal = mul(v.normal, (float3x3)unity_WorldToObject); // Transform the vertex from object spacet to world space - o.worldPos = mul(_Object2World, v.vertex).xyz; + o.worldPos = mul(unity_ObjectToWorld, v.vertex).xyz; return o; } diff --git a/Assets/Shaders/Chapter6/Chapter6-BlinnPhongUseBuildInFunctions.shader b/Assets/Shaders/Chapter6/Chapter6-BlinnPhongUseBuildInFunctions.shader index ed71ff1d..ca8ae109 100644 --- a/Assets/Shaders/Chapter6/Chapter6-BlinnPhongUseBuildInFunctions.shader +++ b/Assets/Shaders/Chapter6/Chapter6-BlinnPhongUseBuildInFunctions.shader @@ -32,12 +32,12 @@ v2f vert(a2v v) { v2f o; - o.pos = mul(UNITY_MATRIX_MVP, v.vertex); + o.pos = UnityObjectToClipPos(v.vertex); // Use the build-in funtion to compute the normal in world space o.worldNormal = UnityObjectToWorldNormal(v.normal); - o.worldPos = mul(_Object2World, v.vertex); + o.worldPos = mul(unity_ObjectToWorld, v.vertex); return o; } diff --git a/Assets/Shaders/Chapter6/Chapter6-DiffusePixelLevel.shader b/Assets/Shaders/Chapter6/Chapter6-DiffusePixelLevel.shader index b4cc4f92..eec81037 100644 --- a/Assets/Shaders/Chapter6/Chapter6-DiffusePixelLevel.shader +++ b/Assets/Shaders/Chapter6/Chapter6-DiffusePixelLevel.shader @@ -28,10 +28,10 @@ v2f vert(a2v v) { v2f o; // Transform the vertex from object space to projection space - o.pos = mul(UNITY_MATRIX_MVP, v.vertex); + o.pos = UnityObjectToClipPos(v.vertex); // Transform the normal from object space to world space - o.worldNormal = mul(v.normal, (float3x3)_World2Object); + o.worldNormal = mul(v.normal, (float3x3)unity_WorldToObject); return o; } diff --git a/Assets/Shaders/Chapter6/Chapter6-DiffuseVertexLevel.shader b/Assets/Shaders/Chapter6/Chapter6-DiffuseVertexLevel.shader index 2af58067..168caae7 100644 --- a/Assets/Shaders/Chapter6/Chapter6-DiffuseVertexLevel.shader +++ b/Assets/Shaders/Chapter6/Chapter6-DiffuseVertexLevel.shader @@ -28,13 +28,13 @@ v2f vert(a2v v) { v2f o; // Transform the vertex from object space to projection space - o.pos = mul(UNITY_MATRIX_MVP, v.vertex); + o.pos = UnityObjectToClipPos(v.vertex); // Get ambient term fixed3 ambient = UNITY_LIGHTMODEL_AMBIENT.xyz; // Transform the normal from object space to world space - fixed3 worldNormal = normalize(mul(v.normal, (float3x3)_World2Object)); + fixed3 worldNormal = normalize(mul(v.normal, (float3x3)unity_WorldToObject)); // Get the light direction in world space fixed3 worldLight = normalize(_WorldSpaceLightPos0.xyz); // Compute diffuse term diff --git a/Assets/Shaders/Chapter6/Chapter6-HalfLambert.shader b/Assets/Shaders/Chapter6/Chapter6-HalfLambert.shader index eaaef128..78e59a04 100644 --- a/Assets/Shaders/Chapter6/Chapter6-HalfLambert.shader +++ b/Assets/Shaders/Chapter6/Chapter6-HalfLambert.shader @@ -28,10 +28,10 @@ v2f vert(a2v v) { v2f o; // Transform the vertex from object space to projection space - o.pos = mul(UNITY_MATRIX_MVP, v.vertex); + o.pos = UnityObjectToClipPos(v.vertex); // Transform the normal from object space to world space - o.worldNormal = mul(v.normal, (float3x3)_World2Object); + o.worldNormal = mul(v.normal, (float3x3)unity_WorldToObject); return o; } diff --git a/Assets/Shaders/Chapter6/Chapter6-SpecularPixelLevel.shader b/Assets/Shaders/Chapter6/Chapter6-SpecularPixelLevel.shader index 02ac2836..66c3f154 100644 --- a/Assets/Shaders/Chapter6/Chapter6-SpecularPixelLevel.shader +++ b/Assets/Shaders/Chapter6/Chapter6-SpecularPixelLevel.shader @@ -33,12 +33,12 @@ v2f vert(a2v v) { v2f o; // Transform the vertex from object space to projection space - o.pos = mul(UNITY_MATRIX_MVP, v.vertex); + o.pos = UnityObjectToClipPos(v.vertex); // Transform the normal from object space to world space - o.worldNormal = mul(v.normal, (float3x3)_World2Object); + o.worldNormal = mul(v.normal, (float3x3)unity_WorldToObject); // Transform the vertex from object spacet to world space - o.worldPos = mul(_Object2World, v.vertex).xyz; + o.worldPos = mul(unity_ObjectToWorld, v.vertex).xyz; return o; } diff --git a/Assets/Shaders/Chapter6/Chapter6-SpecularVertexLevel.shader b/Assets/Shaders/Chapter6/Chapter6-SpecularVertexLevel.shader index ab1ee409..51e96486 100644 --- a/Assets/Shaders/Chapter6/Chapter6-SpecularVertexLevel.shader +++ b/Assets/Shaders/Chapter6/Chapter6-SpecularVertexLevel.shader @@ -32,13 +32,13 @@ v2f vert(a2v v) { v2f o; // Transform the vertex from object space to projection space - o.pos = mul(UNITY_MATRIX_MVP, v.vertex); + o.pos = UnityObjectToClipPos(v.vertex); // Get ambient term fixed3 ambient = UNITY_LIGHTMODEL_AMBIENT.xyz; // Transform the normal from object space to world space - fixed3 worldNormal = normalize(mul(v.normal, (float3x3)_World2Object)); + fixed3 worldNormal = normalize(mul(v.normal, (float3x3)unity_WorldToObject)); // Get the light direction in world space fixed3 worldLightDir = normalize(_WorldSpaceLightPos0.xyz); @@ -48,7 +48,7 @@ // Get the reflect direction in world space fixed3 reflectDir = normalize(reflect(-worldLightDir, worldNormal)); // Get the view direction in world space - fixed3 viewDir = normalize(_WorldSpaceCameraPos.xyz - mul(_Object2World, v.vertex).xyz); + fixed3 viewDir = normalize(_WorldSpaceCameraPos.xyz - mul(unity_ObjectToWorld, v.vertex).xyz); // Compute specular term fixed3 specular = _LightColor0.rgb * _Specular.rgb * pow(saturate(dot(reflectDir, viewDir)), _Gloss); diff --git a/Assets/Shaders/Chapter7/Chapter7-MaskTexture.shader b/Assets/Shaders/Chapter7/Chapter7-MaskTexture.shader index de9d197b..4f8291a1 100644 --- a/Assets/Shaders/Chapter7/Chapter7-MaskTexture.shader +++ b/Assets/Shaders/Chapter7/Chapter7-MaskTexture.shader @@ -46,7 +46,7 @@ v2f vert(a2v v) { v2f o; - o.pos = mul(UNITY_MATRIX_MVP, v.vertex); + o.pos = UnityObjectToClipPos(v.vertex); o.uv.xy = v.texcoord.xy * _MainTex_ST.xy + _MainTex_ST.zw; diff --git a/Assets/Shaders/Chapter7/Chapter7-NormalMapTangentSpace.shader b/Assets/Shaders/Chapter7/Chapter7-NormalMapTangentSpace.shader index c8bb1701..607d1356 100644 --- a/Assets/Shaders/Chapter7/Chapter7-NormalMapTangentSpace.shader +++ b/Assets/Shaders/Chapter7/Chapter7-NormalMapTangentSpace.shader @@ -75,7 +75,7 @@ Shader "Unity Shaders Book/Chapter 7/Normal Map In Tangent Space" { v2f vert(a2v v) { v2f o; - o.pos = mul(UNITY_MATRIX_MVP, v.vertex); + o.pos = UnityObjectToClipPos(v.vertex); o.uv.xy = v.texcoord.xy * _MainTex_ST.xy + _MainTex_ST.zw; o.uv.zw = v.texcoord.xy * _BumpMap_ST.xy + _BumpMap_ST.zw; diff --git a/Assets/Shaders/Chapter7/Chapter7-NormalMapWorldSpace.shader b/Assets/Shaders/Chapter7/Chapter7-NormalMapWorldSpace.shader index 38ca5ae0..a41fa810 100644 --- a/Assets/Shaders/Chapter7/Chapter7-NormalMapWorldSpace.shader +++ b/Assets/Shaders/Chapter7/Chapter7-NormalMapWorldSpace.shader @@ -44,12 +44,12 @@ v2f vert(a2v v) { v2f o; - o.pos = mul(UNITY_MATRIX_MVP, v.vertex); + o.pos = UnityObjectToClipPos(v.vertex); o.uv.xy = v.texcoord.xy * _MainTex_ST.xy + _MainTex_ST.zw; o.uv.zw = v.texcoord.xy * _BumpMap_ST.xy + _BumpMap_ST.zw; - float3 worldPos = mul(_Object2World, v.vertex).xyz; + float3 worldPos = mul(unity_ObjectToWorld, v.vertex).xyz; fixed3 worldNormal = UnityObjectToWorldNormal(v.normal); fixed3 worldTangent = UnityObjectToWorldDir(v.tangent.xyz); fixed3 worldBinormal = cross(worldNormal, worldTangent) * v.tangent.w; diff --git a/Assets/Shaders/Chapter7/Chapter7-RampTexture.shader b/Assets/Shaders/Chapter7/Chapter7-RampTexture.shader index 388707c3..a57d02b4 100644 --- a/Assets/Shaders/Chapter7/Chapter7-RampTexture.shader +++ b/Assets/Shaders/Chapter7/Chapter7-RampTexture.shader @@ -37,11 +37,11 @@ v2f vert(a2v v) { v2f o; - o.pos = mul(UNITY_MATRIX_MVP, v.vertex); + o.pos = UnityObjectToClipPos(v.vertex); o.worldNormal = UnityObjectToWorldNormal(v.normal); - o.worldPos = mul(_Object2World, v.vertex).xyz; + o.worldPos = mul(unity_ObjectToWorld, v.vertex).xyz; o.uv = TRANSFORM_TEX(v.texcoord, _RampTex); diff --git a/Assets/Shaders/Chapter7/Chapter7-SingleTexture.shader b/Assets/Shaders/Chapter7/Chapter7-SingleTexture.shader index d07f51f1..1ed54e91 100644 --- a/Assets/Shaders/Chapter7/Chapter7-SingleTexture.shader +++ b/Assets/Shaders/Chapter7/Chapter7-SingleTexture.shader @@ -37,11 +37,11 @@ v2f vert(a2v v) { v2f o; - o.pos = mul(UNITY_MATRIX_MVP, v.vertex); + o.pos = UnityObjectToClipPos(v.vertex); o.worldNormal = UnityObjectToWorldNormal(v.normal); - o.worldPos = mul(_Object2World, v.vertex).xyz; + o.worldPos = mul(unity_ObjectToWorld, v.vertex).xyz; o.uv = v.texcoord.xy * _MainTex_ST.xy + _MainTex_ST.zw; // Or just call the built-in function diff --git a/Assets/Shaders/Chapter7/Chapter7-TextureProperties.shader b/Assets/Shaders/Chapter7/Chapter7-TextureProperties.shader index d5fe8e86..4068070f 100644 --- a/Assets/Shaders/Chapter7/Chapter7-TextureProperties.shader +++ b/Assets/Shaders/Chapter7/Chapter7-TextureProperties.shader @@ -29,7 +29,7 @@ v2f vert(a2v v) { v2f o; // Transform the vertex from object space to projection space - o.position = mul(UNITY_MATRIX_MVP, v.vertex); + o.position = UnityObjectToClipPos(v.vertex); o.uv = TRANSFORM_TEX(v.texcoord, _MainTex); diff --git a/Assets/Shaders/Chapter8/Chapter8-AlphaBlend.shader b/Assets/Shaders/Chapter8/Chapter8-AlphaBlend.shader index b764f09e..41db92a2 100644 --- a/Assets/Shaders/Chapter8/Chapter8-AlphaBlend.shader +++ b/Assets/Shaders/Chapter8/Chapter8-AlphaBlend.shader @@ -40,11 +40,11 @@ v2f vert(a2v v) { v2f o; - o.pos = mul(UNITY_MATRIX_MVP, v.vertex); + o.pos = UnityObjectToClipPos(v.vertex); o.worldNormal = UnityObjectToWorldNormal(v.normal); - o.worldPos = mul(_Object2World, v.vertex).xyz; + o.worldPos = mul(unity_ObjectToWorld, v.vertex).xyz; o.uv = TRANSFORM_TEX(v.texcoord, _MainTex); diff --git a/Assets/Shaders/Chapter8/Chapter8-AlphaBlendBothSided.shader b/Assets/Shaders/Chapter8/Chapter8-AlphaBlendBothSided.shader index b51b31b4..771e2cab 100644 --- a/Assets/Shaders/Chapter8/Chapter8-AlphaBlendBothSided.shader +++ b/Assets/Shaders/Chapter8/Chapter8-AlphaBlendBothSided.shader @@ -43,11 +43,11 @@ v2f vert(a2v v) { v2f o; - o.pos = mul(UNITY_MATRIX_MVP, v.vertex); + o.pos = UnityObjectToClipPos(v.vertex); o.worldNormal = UnityObjectToWorldNormal(v.normal); - o.worldPos = mul(_Object2World, v.vertex).xyz; + o.worldPos = mul(unity_ObjectToWorld, v.vertex).xyz; o.uv = TRANSFORM_TEX(v.texcoord, _MainTex); @@ -108,11 +108,11 @@ v2f vert(a2v v) { v2f o; - o.pos = mul(UNITY_MATRIX_MVP, v.vertex); + o.pos = UnityObjectToClipPos(v.vertex); o.worldNormal = UnityObjectToWorldNormal(v.normal); - o.worldPos = mul(_Object2World, v.vertex).xyz; + o.worldPos = mul(unity_ObjectToWorld, v.vertex).xyz; o.uv = TRANSFORM_TEX(v.texcoord, _MainTex); diff --git a/Assets/Shaders/Chapter8/Chapter8-AlphaBlendZWrite.shader b/Assets/Shaders/Chapter8/Chapter8-AlphaBlendZWrite.shader index a70931d1..dd996573 100644 --- a/Assets/Shaders/Chapter8/Chapter8-AlphaBlendZWrite.shader +++ b/Assets/Shaders/Chapter8/Chapter8-AlphaBlendZWrite.shader @@ -46,11 +46,11 @@ v2f vert(a2v v) { v2f o; - o.pos = mul(UNITY_MATRIX_MVP, v.vertex); + o.pos = UnityObjectToClipPos(v.vertex); o.worldNormal = UnityObjectToWorldNormal(v.normal); - o.worldPos = mul(_Object2World, v.vertex).xyz; + o.worldPos = mul(unity_ObjectToWorld, v.vertex).xyz; o.uv = TRANSFORM_TEX(v.texcoord, _MainTex); diff --git a/Assets/Shaders/Chapter8/Chapter8-AlphaTest.shader b/Assets/Shaders/Chapter8/Chapter8-AlphaTest.shader index ea2ada6c..baf371a7 100644 --- a/Assets/Shaders/Chapter8/Chapter8-AlphaTest.shader +++ b/Assets/Shaders/Chapter8/Chapter8-AlphaTest.shader @@ -37,11 +37,11 @@ v2f vert(a2v v) { v2f o; - o.pos = mul(UNITY_MATRIX_MVP, v.vertex); + o.pos = UnityObjectToClipPos(v.vertex); o.worldNormal = UnityObjectToWorldNormal(v.normal); - o.worldPos = mul(_Object2World, v.vertex).xyz; + o.worldPos = mul(unity_ObjectToWorld, v.vertex).xyz; o.uv = TRANSFORM_TEX(v.texcoord, _MainTex); diff --git a/Assets/Shaders/Chapter8/Chapter8-AlphaTestBothSided.shader b/Assets/Shaders/Chapter8/Chapter8-AlphaTestBothSided.shader index 24dbb70e..637344b3 100644 --- a/Assets/Shaders/Chapter8/Chapter8-AlphaTestBothSided.shader +++ b/Assets/Shaders/Chapter8/Chapter8-AlphaTestBothSided.shader @@ -40,11 +40,11 @@ v2f vert(a2v v) { v2f o; - o.pos = mul(UNITY_MATRIX_MVP, v.vertex); + o.pos = UnityObjectToClipPos(v.vertex); o.worldNormal = UnityObjectToWorldNormal(v.normal); - o.worldPos = mul(_Object2World, v.vertex).xyz; + o.worldPos = mul(unity_ObjectToWorld, v.vertex).xyz; o.uv = TRANSFORM_TEX(v.texcoord, _MainTex); diff --git a/Assets/Shaders/Chapter8/Chapter8-BlendOperations 1.shader b/Assets/Shaders/Chapter8/Chapter8-BlendOperations 1.shader index 9daa80a7..9cf47553 100644 --- a/Assets/Shaders/Chapter8/Chapter8-BlendOperations 1.shader +++ b/Assets/Shaders/Chapter8/Chapter8-BlendOperations 1.shader @@ -65,7 +65,7 @@ v2f vert(a2v v) { v2f o; - o.pos = mul(UNITY_MATRIX_MVP, v.vertex); + o.pos = UnityObjectToClipPos(v.vertex); o.uv = TRANSFORM_TEX(v.texcoord, _MainTex); diff --git a/Assets/Shaders/Chapter8/Chapter8-BlendOperations.shader b/Assets/Shaders/Chapter8/Chapter8-BlendOperations.shader index 51d79321..8a21ca89 100644 --- a/Assets/Shaders/Chapter8/Chapter8-BlendOperations.shader +++ b/Assets/Shaders/Chapter8/Chapter8-BlendOperations.shader @@ -39,7 +39,7 @@ v2f vert(a2v v) { v2f o; - o.pos = mul(UNITY_MATRIX_MVP, v.vertex); + o.pos = UnityObjectToClipPos(v.vertex); o.uv = TRANSFORM_TEX(v.texcoord, _MainTex); diff --git a/Assets/Shaders/Chapter9/Chapter9-AlphaBlendWithShadow.shader b/Assets/Shaders/Chapter9/Chapter9-AlphaBlendWithShadow.shader index 548dd460..044409b0 100644 --- a/Assets/Shaders/Chapter9/Chapter9-AlphaBlendWithShadow.shader +++ b/Assets/Shaders/Chapter9/Chapter9-AlphaBlendWithShadow.shader @@ -44,11 +44,11 @@ v2f vert(a2v v) { v2f o; - o.pos = mul(UNITY_MATRIX_MVP, v.vertex); + o.pos = UnityObjectToClipPos(v.vertex); o.worldNormal = UnityObjectToWorldNormal(v.normal); - o.worldPos = mul(_Object2World, v.vertex).xyz; + o.worldPos = mul(unity_ObjectToWorld, v.vertex).xyz; o.uv = TRANSFORM_TEX(v.texcoord, _MainTex); diff --git a/Assets/Shaders/Chapter9/Chapter9-AlphaTestWithShadow.shader b/Assets/Shaders/Chapter9/Chapter9-AlphaTestWithShadow.shader index 284053ab..a656c56d 100644 --- a/Assets/Shaders/Chapter9/Chapter9-AlphaTestWithShadow.shader +++ b/Assets/Shaders/Chapter9/Chapter9-AlphaTestWithShadow.shader @@ -43,11 +43,11 @@ v2f vert(a2v v) { v2f o; - o.pos = mul(UNITY_MATRIX_MVP, v.vertex); + o.pos = UnityObjectToClipPos(v.vertex); o.worldNormal = UnityObjectToWorldNormal(v.normal); - o.worldPos = mul(_Object2World, v.vertex).xyz; + o.worldPos = mul(unity_ObjectToWorld, v.vertex).xyz; o.uv = TRANSFORM_TEX(v.texcoord, _MainTex); diff --git a/Assets/Shaders/Chapter9/Chapter9-AttenuationAndShadowUseBuildInFunctions.shader b/Assets/Shaders/Chapter9/Chapter9-AttenuationAndShadowUseBuildInFunctions.shader index dc42d7e6..0486bf52 100644 --- a/Assets/Shaders/Chapter9/Chapter9-AttenuationAndShadowUseBuildInFunctions.shader +++ b/Assets/Shaders/Chapter9/Chapter9-AttenuationAndShadowUseBuildInFunctions.shader @@ -41,11 +41,11 @@ v2f vert(a2v v) { v2f o; - o.pos = mul(UNITY_MATRIX_MVP, v.vertex); + o.pos = UnityObjectToClipPos(v.vertex); o.worldNormal = UnityObjectToWorldNormal(v.normal); - o.worldPos = mul(_Object2World, v.vertex).xyz; + o.worldPos = mul(unity_ObjectToWorld, v.vertex).xyz; // Pass shadow coordinates to pixel shader TRANSFER_SHADOW(o); @@ -111,11 +111,11 @@ v2f vert(a2v v) { v2f o; - o.pos = mul(UNITY_MATRIX_MVP, v.vertex); + o.pos = UnityObjectToClipPos(v.vertex); o.worldNormal = UnityObjectToWorldNormal(v.normal); - o.worldPos = mul(_Object2World, v.vertex).xyz; + o.worldPos = mul(unity_ObjectToWorld, v.vertex).xyz; // Pass shadow coordinates to pixel shader TRANSFER_SHADOW(o); diff --git a/Assets/Shaders/Chapter9/Chapter9-ForwardRendering.shader b/Assets/Shaders/Chapter9/Chapter9-ForwardRendering.shader index a1619a41..4c10bf33 100644 --- a/Assets/Shaders/Chapter9/Chapter9-ForwardRendering.shader +++ b/Assets/Shaders/Chapter9/Chapter9-ForwardRendering.shader @@ -38,11 +38,11 @@ v2f vert(a2v v) { v2f o; - o.pos = mul(UNITY_MATRIX_MVP, v.vertex); + o.pos = UnityObjectToClipPos(v.vertex); o.worldNormal = UnityObjectToWorldNormal(v.normal); - o.worldPos = mul(_Object2World, v.vertex).xyz; + o.worldPos = mul(unity_ObjectToWorld, v.vertex).xyz; return o; } @@ -101,11 +101,11 @@ v2f vert(a2v v) { v2f o; - o.pos = mul(UNITY_MATRIX_MVP, v.vertex); + o.pos = UnityObjectToClipPos(v.vertex); o.worldNormal = UnityObjectToWorldNormal(v.normal); - o.worldPos = mul(_Object2World, v.vertex).xyz; + o.worldPos = mul(unity_ObjectToWorld, v.vertex).xyz; return o; } @@ -128,10 +128,10 @@ fixed atten = 1.0; #else #if defined (POINT) - float3 lightCoord = mul(_LightMatrix0, float4(i.worldPos, 1)).xyz; + float3 lightCoord = mul(unity_WorldToLight, float4(i.worldPos, 1)).xyz; fixed atten = tex2D(_LightTexture0, dot(lightCoord, lightCoord).rr).UNITY_ATTEN_CHANNEL; #elif defined (SPOT) - float4 lightCoord = mul(_LightMatrix0, float4(i.worldPos, 1)); + float4 lightCoord = mul(unity_WorldToLight, float4(i.worldPos, 1)); fixed atten = (lightCoord.z > 0) * tex2D(_LightTexture0, lightCoord.xy / lightCoord.w + 0.5).w * tex2D(_LightTextureB0, dot(lightCoord, lightCoord).rr).UNITY_ATTEN_CHANNEL; #else fixed atten = 1.0; diff --git a/Assets/Shaders/Chapter9/Chapter9-Shadow.shader b/Assets/Shaders/Chapter9/Chapter9-Shadow.shader index 8225d389..b9102f17 100644 --- a/Assets/Shaders/Chapter9/Chapter9-Shadow.shader +++ b/Assets/Shaders/Chapter9/Chapter9-Shadow.shader @@ -41,11 +41,11 @@ v2f vert(a2v v) { v2f o; - o.pos = mul(UNITY_MATRIX_MVP, v.vertex); + o.pos = UnityObjectToClipPos(v.vertex); o.worldNormal = UnityObjectToWorldNormal(v.normal); - o.worldPos = mul(_Object2World, v.vertex).xyz; + o.worldPos = mul(unity_ObjectToWorld, v.vertex).xyz; // Pass shadow coordinates to pixel shader TRANSFER_SHADOW(o); @@ -111,11 +111,11 @@ v2f vert(a2v v) { v2f o; - o.position = mul(UNITY_MATRIX_MVP, v.vertex); + o.position = UnityObjectToClipPos(v.vertex); o.worldNormal = UnityObjectToWorldNormal(v.normal); - o.worldPos = mul(_Object2World, v.vertex).xyz; + o.worldPos = mul(unity_ObjectToWorld, v.vertex).xyz; return o; } @@ -137,7 +137,7 @@ #ifdef USING_DIRECTIONAL_LIGHT fixed atten = 1.0; #else - float3 lightCoord = mul(_LightMatrix0, float4(i.worldPos, 1)).xyz; + float3 lightCoord = mul(unity_WorldToLight, float4(i.worldPos, 1)).xyz; fixed atten = tex2D(_LightTexture0, dot(lightCoord, lightCoord).rr).UNITY_ATTEN_CHANNEL; #endif diff --git a/Assets/Shaders/Common/BumpedDiffuse.shader b/Assets/Shaders/Common/BumpedDiffuse.shader index 768dcdc7..644f2822 100644 --- a/Assets/Shaders/Common/BumpedDiffuse.shader +++ b/Assets/Shaders/Common/BumpedDiffuse.shader @@ -44,12 +44,12 @@ v2f vert(a2v v) { v2f o; - o.pos = mul(UNITY_MATRIX_MVP, v.vertex); + o.pos = UnityObjectToClipPos(v.vertex); o.uv.xy = v.texcoord.xy * _MainTex_ST.xy + _MainTex_ST.zw; o.uv.zw = v.texcoord.xy * _BumpMap_ST.xy + _BumpMap_ST.zw; - float3 worldPos = mul(_Object2World, v.vertex).xyz; + float3 worldPos = mul(unity_ObjectToWorld, v.vertex).xyz; fixed3 worldNormal = UnityObjectToWorldNormal(v.normal); fixed3 worldTangent = UnityObjectToWorldDir(v.tangent.xyz); fixed3 worldBinormal = cross(worldNormal, worldTangent) * v.tangent.w; @@ -126,12 +126,12 @@ v2f vert(a2v v) { v2f o; - o.pos = mul(UNITY_MATRIX_MVP, v.vertex); + o.pos = UnityObjectToClipPos(v.vertex); o.uv.xy = v.texcoord.xy * _MainTex_ST.xy + _MainTex_ST.zw; o.uv.zw = v.texcoord.xy * _BumpMap_ST.xy + _BumpMap_ST.zw; - float3 worldPos = mul(_Object2World, v.vertex).xyz; + float3 worldPos = mul(unity_ObjectToWorld, v.vertex).xyz; fixed3 worldNormal = UnityObjectToWorldNormal(v.normal); fixed3 worldTangent = UnityObjectToWorldDir(v.tangent.xyz); fixed3 worldBinormal = cross(worldNormal, worldTangent) * v.tangent.w; diff --git a/Assets/Shaders/Common/BumpedSpecular.shader b/Assets/Shaders/Common/BumpedSpecular.shader index 020508c4..2a2080e2 100644 --- a/Assets/Shaders/Common/BumpedSpecular.shader +++ b/Assets/Shaders/Common/BumpedSpecular.shader @@ -49,14 +49,14 @@ v2f vert(a2v v) { v2f o; - o.pos = mul(UNITY_MATRIX_MVP, v.vertex); + o.pos = UnityObjectToClipPos(v.vertex); o.uv.xy = v.texcoord.xy * _MainTex_ST.xy + _MainTex_ST.zw; o.uv.zw = v.texcoord.xy * _BumpMap_ST.xy + _BumpMap_ST.zw; TANGENT_SPACE_ROTATION; - float3 worldPos = mul(_Object2World, v.vertex).xyz; + float3 worldPos = mul(unity_ObjectToWorld, v.vertex).xyz; fixed3 worldNormal = UnityObjectToWorldNormal(v.normal); fixed3 worldTangent = UnityObjectToWorldDir(v.tangent.xyz); fixed3 worldBinormal = cross(worldNormal, worldTangent) * v.tangent.w; @@ -139,12 +139,12 @@ v2f vert(a2v v) { v2f o; - o.pos = mul(UNITY_MATRIX_MVP, v.vertex); + o.pos = UnityObjectToClipPos(v.vertex); o.uv.xy = v.texcoord.xy * _MainTex_ST.xy + _MainTex_ST.zw; o.uv.zw = v.texcoord.xy * _BumpMap_ST.xy + _BumpMap_ST.zw; - float3 worldPos = mul(_Object2World, v.vertex).xyz; + float3 worldPos = mul(unity_ObjectToWorld, v.vertex).xyz; fixed3 worldNormal = UnityObjectToWorldNormal(v.normal); fixed3 worldTangent = UnityObjectToWorldDir(v.tangent.xyz); fixed3 worldBinormal = cross(worldNormal, worldTangent) * v.tangent.w; diff --git a/ProjectSettings/ProjectSettings.asset b/ProjectSettings/ProjectSettings.asset index 7c9918bb9161a318dabe1a3a2af8640a94991849..1290e2cf00ea84342526ec080e574b351f990c25 100644 GIT binary patch literal 52294 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 C>tO8w literal 38069 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 Date: Thu, 31 Aug 2017 09:46:49 +0800 Subject: [PATCH 2/4] [Update] update readme --- README.md | 28 ++++++++++++++++++++++++++-- 1 file changed, 26 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index d5401344..fef22820 100755 --- a/README.md +++ b/README.md @@ -36,9 +36,33 @@ * 和Unity 4.x版本相比,Unity 5.x最大的变化之一就是很多以前只有在专业版才支持的功能,在免费版也同样提供了。因此,如果读者使用的是Unity 4.x免费版,可能会发现本书中的某些材质会出错。 -## 升级Unity 5.4 +## Unity 5.3及其以下Unity 5.x版本 -Unity 5.4对Shader部分进行了一些比较大的更新,最明显的一个特征是使用了unity_XXX来代替原有的XXX变换矩阵,例如_Object2World被替换成了unity_ObjectToWorld,_World2Object被替换成了unity_WorldToObject(均在UnityShaderVariables.cginc文件中被声明)。如果你打算直接使用Unity 5.4来编译本项目,Unity会自动更新相应的Shader,因此仍然不会报错。但在学习本书时,读者需要注意代码中一些由于自动更新造成的变化。 +**分支链接**:[master](https://github.com/candycat1992/Unity_Shaders_Book/tree/master) + +在本书编写时,我们使用的版本是Unity 5.3,因此使用这些Unity版本的读者请使用本项目[master](https://github.com/candycat1992/Unity_Shaders_Book/tree/master)分支的相关代码。 + +## Unity 5.4及其以上Unity 5.x版本 + +**分支链接**:[unity_5_4](https://github.com/candycat1992/Unity_Shaders_Book/tree/unity_5_4) + +Unity 5.4对Shader部分进行了一些比较大的更新,比较明显的变化有: + +* 使用了unity_XXX来代替原有的XXX变换矩阵,例如_Object2World被替换成了unity_ObjectToWorld,_World2Object被替换成了unity_WorldToObject(均在UnityShaderVariables.cginc文件中被声明),_LightMatrix0被替换成了unity_WorldToLight(在AutoLight.cginc文件中被声明)。 + +* 使用了一些内置函数来代替某些运算,例如mul(UNITY_MATRIX_MVP,*)相关计算被替换成了UnityObjectToClipPos(*)。 + +在学习本书时,读者需要注意代码中一些由于更新造成的变化。 + +## 截止到目前的Unity 2017版本 + +**分支链接**:[unity_2017_1](https://github.com/candycat1992/Unity_Shaders_Book/tree/unity_2017_1) + +Unity 2017对Shader部分没有较大更新,我们主要做了以下更改来消除升级造成的Shader Warning信息: + +* 使用内置的UnityObjectToViewPos(*)函数来代替mul(UNITY_MATRIX_MV, *)对顶点进行变换。 + +在学习本书时,读者需要注意代码中一些由于更新造成的变化。 # 使用说明 From 31d4abac1961689d3188eb8878060fb1b2a2c336 Mon Sep 17 00:00:00 2001 From: "lele.feng" Date: Tue, 31 Oct 2017 19:46:39 +0800 Subject: [PATCH 3/4] [Fix] fix reverse-z bug in Chapter13-MotionBlurWithDepthTexture in Unity 5.5+ --- .../Chapter13/Chapter13-MotionBlurWithDepthTexture.shader | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Assets/Shaders/Chapter13/Chapter13-MotionBlurWithDepthTexture.shader b/Assets/Shaders/Chapter13/Chapter13-MotionBlurWithDepthTexture.shader index 1f591db7..3f085670 100644 --- a/Assets/Shaders/Chapter13/Chapter13-MotionBlurWithDepthTexture.shader +++ b/Assets/Shaders/Chapter13/Chapter13-MotionBlurWithDepthTexture.shader @@ -39,6 +39,9 @@ fixed4 frag(v2f i) : SV_Target { // Get the depth buffer value at this pixel. float d = SAMPLE_DEPTH_TEXTURE(_CameraDepthTexture, i.uv_depth); + #if defined(UNITY_REVERSED_Z) + d = 1.0 - d; + #endif // H is the viewport position at this pixel in the range -1 to 1. float4 H = float4(i.uv.x * 2 - 1, i.uv.y * 2 - 1, d * 2 - 1, 1); // Transform by the view-projection inverse. From 0d9daf26c5e0500a2f1ea577e4bb3d132f108d5b Mon Sep 17 00:00:00 2001 From: "lele.feng" Date: Tue, 31 Oct 2017 20:04:59 +0800 Subject: [PATCH 4/4] [Update] update readme --- README.md | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/README.md b/README.md index fef22820..316fd95c 100755 --- a/README.md +++ b/README.md @@ -54,6 +54,29 @@ Unity 5.4对Shader部分进行了一些比较大的更新,比较明显的变 在学习本书时,读者需要注意代码中一些由于更新造成的变化。 +### 升级Unity 5.5 + +从Unity 5.5开始,Unity在某些平台(如DX11、DX12、PS4、Xbox One、Metal)等平台对深度缓存进行了反转操作,使得在近平面处的深度值为1,而远平面处为0。这样做的原因主要是为了更加充分得利用浮点深度缓存,具体原因可以参见NVIDIA的相关博客[Depth Precision Visualized](https://developer.nvidia.com/content/depth-precision-visualized)。Unity在[Upgrading to Unity 5.5](https://docs.unity3d.com/Manual/UpgradeGuide55.html)和[Platform-specific rendering differences](https://docs.unity3d.com/Manual/SL-PlatformDifferences.html)文档中对此进行了说明。 + +在本书代码中,我们在第13章用到了深度纹理,其中对于使用了Linear01Depth、LinearEyeDepth等Unity内置函数的部分不受此变化影响,但我们在Chapter13-MotionBlurWithDepthTexture中直接访问了深度值来计算世界空间下的坐标: + + +``` +// Get the depth buffer value at this pixel. +float d = SAMPLE_DEPTH_TEXTURE(_CameraDepthTexture, i.uv_depth); +``` + +这使得在反转深度缓存的情况下会得到错误的结果。为了解决这个问题,我们可以使用内置宏来判断深度是否已被反转,并据此来做出相应的计算。变化后的代码如下: + + +``` +// Get the depth buffer value at this pixel. +float d = SAMPLE_DEPTH_TEXTURE(_CameraDepthTexture, i.uv_depth); +#if defined(UNITY_REVERSED_Z) + d = 1.0 - d; +#endif +``` + ## 截止到目前的Unity 2017版本 **分支链接**:[unity_2017_1](https://github.com/candycat1992/Unity_Shaders_Book/tree/unity_2017_1)