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..3f085670 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; @@ -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. 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 7c9918bb..1290e2cf 100644 Binary files a/ProjectSettings/ProjectSettings.asset and b/ProjectSettings/ProjectSettings.asset differ diff --git a/ProjectSettings/ProjectVersion.txt b/ProjectSettings/ProjectVersion.txt index 961ebb93..ca09a3da 100644 --- a/ProjectSettings/ProjectVersion.txt +++ b/ProjectSettings/ProjectVersion.txt @@ -1,2 +1 @@ -m_EditorVersion: 5.3.1f1 -m_StandardAssetsVersion: 0 +m_EditorVersion: 5.6.0f3 diff --git a/README.md b/README.md index d5401344..316fd95c 100755 --- a/README.md +++ b/README.md @@ -36,9 +36,56 @@ * 和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 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) + +Unity 2017对Shader部分没有较大更新,我们主要做了以下更改来消除升级造成的Shader Warning信息: + +* 使用内置的UnityObjectToViewPos(*)函数来代替mul(UNITY_MATRIX_MV, *)对顶点进行变换。 + +在学习本书时,读者需要注意代码中一些由于更新造成的变化。 # 使用说明