- Home /
Unity 5 upgrade broke lightmapped shader
Disclaimer: I know little to nothing about shaders.
Hey all, I upgraded a project to Unity 5 that was using a custom shader. Unity has force "upgraded" the shader as well, but now it just renders black. Unity was nice enough to tell me what it did, but I have no idea why it would stop working. I also visited the changes on the Upgrade guide for shaders and didn't see anything that should affect this one (as far as I know)
It gives me three upgrade notes:
// Upgrade NOTE: commented out 'float4 unity_LightmapST', a built-in variable
// Upgrade NOTE: commented out 'sampler2D unity_Lightmap', a built-in variable
// Upgrade NOTE: replaced tex2D unity_Lightmap with UNITY_SAMPLE_TEX2D
The first two seem obvious and harmless enough. The last one also doesn't seem to be a big issue. Nevertheless, the shader does not render anything but black anymore. These are the only changes according to Git, so Unity isn't lying.
Here's the shader with changes noted in comments. Any help is greatly appreciated.
Shader "CPX_Custom/Mobile/Unlit Lightmapped CG" {
Properties {
_MainTex ("Base (RGB)", 2D) = "white" {}
}
SubShader {
Tags { "RenderType"="Opaque" }
LOD 100
Pass {
CGPROGRAM
#include "UnityCG.cginc"
#pragma vertex vertexPass
#pragma fragment pixelPass
uniform sampler2D _MainTex;
// uniform sampler2D unity_Lightmap;
uniform float4 _MainTex_ST;
// uniform float4 unity_LightmapST;
struct vertexInput{
float4 vertex : POSITION;
float2 texcoord : TEXCOORD0;
float2 texcoord1: TEXCOORD1;
};
struct vertexOutput{
float4 pos : POSITION;
float4 UV : TEXCOORD0;
};
struct pixelOutput{
float4 color : COLOR0;
};
vertexOutput vertexPass(vertexInput input){
vertexOutput output;
output.UV.xy = input.texcoord;
output.UV.zw = input.texcoord1 * unity_LightmapST.xy + unity_LightmapST.zw;
output.pos = mul(UNITY_MATRIX_MVP,input.vertex);
return output;
}
pixelOutput pixelPass(vertexOutput input){
pixelOutput output;
float4 color = tex2D(_MainTex, TRANSFORM_TEX(input.UV.xy,_MainTex));
// USED TO BE: float4 lightMap = float4(DecodeLightmap(tex2D(unity_Lightmap, input.UV.zw)),1.0);
float4 lightMap = float4(DecodeLightmap(UNITY_SAMPLE_TEX2D(unity_Lightmap, input.UV.zw)),1.0);
output.color = float4(color.rgb*lightMap.rgb,color.a);
return output;
}
ENDCG
}
}
// Fallback "Unlit/Texture"
}
Answer by CoalCzar · May 04, 2015 at 11:13 PM
This was a false accusation of the shader. The actual problem was that Unity completely changed its lightmapping process and I didn't realize that huge change, so we lost our lightmaps.
Your answer
Follow this Question
Related Questions
How to force the compilation of a shader in Unity? 5 Answers
Unity5 CG Shader get model position. 1 Answer
Problem with custom shader (ShaderLab + Cg) 1 Answer
Unity5 v Unity4 Shader array errors 1 Answer
How to determine shader center? 0 Answers