I posted here: https://answers.unity.com/questions/1442235/surface-shader-vertex-function-splatmapvert-not-fo.html but looks like the forums are more handy. I think this is a simple matter of not understanding how references work in shaders but i posted all my code below my question to be safe.
I am trying to combine two working shaders into one new one but i get the error as seen in title. I am not sure why SplatmapVert is acceptable in the terrain shader i am taking it from but cannot be found when used in the combined shader. Here is the line i want to copy over: #pragma surface surf Lambert vertex:SplatmapVert finalcolor:SplatmapFinalColor finalprepass:SplatmapFinalPrepass finalgbuffer:SplatmapFinalGBuffer noinstancing
See below for (1)the terrain shader, (2)the FOW shader and (3)my attempt at combining them.
The terrain shader (with the pragma line i want):
Shader "Nature/Terrain/Diffuse" {
Properties {
[HideInInspector] _Control ("Control (RGBA)", 2D) = "red" {}
[HideInInspector] _Splat3 ("Layer 3 (A)", 2D) = "white" {}
[HideInInspector] _Splat2 ("Layer 2 (B)", 2D) = "white" {}
[HideInInspector] _Splat1 ("Layer 1 (G)", 2D) = "white" {}
[HideInInspector] _Splat0 ("Layer 0 (R)", 2D) = "white" {}
[HideInInspector] _Normal3 ("Normal 3 (A)", 2D) = "bump" {}
[HideInInspector] _Normal2 ("Normal 2 (B)", 2D) = "bump" {}
[HideInInspector] _Normal1 ("Normal 1 (G)", 2D) = "bump" {}
[HideInInspector] _Normal0 ("Normal 0 (R)", 2D) = "bump" {}
// used in fallback on old cards & base map
[HideInInspector] _MainTex ("BaseMap (RGB)", 2D) = "white" {}
[HideInInspector] _Color ("Main Color", Color) = (1,1,1,1)
}
CGINCLUDE
#pragma surface surf Lambert vertex:SplatmapVert finalcolor:SplatmapFinalColor finalprepass:SplatmapFinalPrepass finalgbuffer:SplatmapFinalGBuffer noinstancing
#pragma multi_compile_fog
#include "TerrainSplatmapCommon.cginc"
void surf(Input IN, inout SurfaceOutput o)
{
half4 splat_control;
half weight;
fixed4 mixedDiffuse;
SplatmapMix(IN, splat_control, weight, mixedDiffuse, o.Normal);
o.Albedo = mixedDiffuse.rgb;
o.Alpha = weight;
}
ENDCG
Category {
Tags {
"Queue" = "Geometry-99"
"RenderType" = "Opaque"
}
// TODO: Seems like "#pragma target 3.0 _TERRAIN_NORMAL_MAP" can't fallback correctly on less capable devices?
// Use two sub-shaders to simulate different features for different targets and still fallback correctly.
SubShader { // for sm3.0+ targets
CGPROGRAM
#pragma target 3.0
#pragma multi_compile __ _TERRAIN_NORMAL_MAP
ENDCG
}
SubShader { // for sm2.0 targets
CGPROGRAM
ENDCG
}
}
Dependency "AddPassShader" = "Hidden/TerrainEngine/Splatmap/Diffuse-AddPass"
Dependency "BaseMapShader" = "Diffuse"
Dependency "Details0" = "Hidden/TerrainEngine/Details/Vertexlit"
Dependency "Details1" = "Hidden/TerrainEngine/Details/WavingDoublePass"
Dependency "Details2" = "Hidden/TerrainEngine/Details/BillboardWavingDoublePass"
Dependency "Tree0" = "Hidden/TerrainEngine/BillboardTree"
Fallback "Diffuse"
}
The Fog of War shader i am trying to combine with it:
Shader "Fog Of War/Terrain" {
Properties {
_MainTex ("Base (RGB)", 2D) = "white" {}
}
SubShader {
Tags { "RenderType"="Opaque" }
LOD 200
CGPROGRAM
#pragma surface surf Lambert
#include "FOWIncludes.cginc"
sampler2D _MainTex;
sampler2D _FOWTex;
float4 _FOWTex_ST;
struct Input {
float2 uv_MainTex;
float3 worldPos;
};
void surf (Input IN, inout SurfaceOutput o) {
half4 c = tex2D(_MainTex, IN.uv_MainTex);
half4 fow = tex2D(_FOWTex, TRANSFORM_TEX(IN.worldPos.xz, _FOWTex));
half4 t = TransformColourFOWAO(c, fow);
o.Albedo = t.rgb;
o.Alpha = t.a;
}
ENDCG
}
FallBack "Diffuse"
}
The combined result so far (should be the same effect as the FOW one above):
-
Shader "Nature/Terrain/FOW" { Properties { [HideInInspector] _Control ("Control (RGBA)", 2D) = "red" {} [HideInInspector] _Splat3 ("Layer 3 (A)", 2D) = "white" {} [HideInInspector] _Splat2 ("Layer 2 (B)", 2D) = "white" {} [HideInInspector] _Splat1 ("Layer 1 (G)", 2D) = "white" {} [HideInInspector] _Splat0 ("Layer 0 (R)", 2D) = "white" {} [HideInInspector] _Normal3 ("Normal 3 (A)", 2D) = "bump" {} [HideInInspector] _Normal2 ("Normal 2 (B)", 2D) = "bump" {} [HideInInspector] _Normal1 ("Normal 1 (G)", 2D) = "bump" {} [HideInInspector] _Normal0 ("Normal 0 (R)", 2D) = "bump" {} [HideInInspector] _MainTex ("BaseMap (RGB)", 2D) = "white" {} [HideInInspector] _Color ("Main Color", Color) = (1,1,1,1) } //CGINCLUDE //#pragma vertex:SplatmapVert finalcolor:SplatmapFinalColor //ENDCG SubShader { Tags { "RenderType"="Opaque" } LOD 200 CGPROGRAM #pragma multi_compile_fog #pragma surface surf Lambert //vertex:SplatmapVert finalcolor:SplatmapFinalColor finalprepass:SplatmapFinalPrepass finalgbuffer:SplatmapFinalGBuffer noinstancing #include "FOWIncludes.cginc" sampler2D _MainTex; sampler2D _FOWTex; float4 _FOWTex_ST; struct Input { float2 uv_MainTex; float3 worldPos; }; void surf (Input IN, inout SurfaceOutput o) { half4 splat_control; half weight; fixed4 mixedDiffuse; //SplatmapMix(IN, splat_control, weight, mixedDiffuse, o.Normal); half4 c = tex2D(_MainTex, IN.uv_MainTex); half4 fow = tex2D(_FOWTex, TRANSFORM_TEX(IN.worldPos.xz, _FOWTex)); half4 t = TransformColourFOWAO(c, fow); o.Albedo = t.rgb; o.Alpha = t.a; } ENDCG } Dependency "AddPassShader" = "Hidden/TerrainEngine/Splatmap/Diffuse-AddPass" Dependency "BaseMapShader" = "Diffuse" Dependency "Details0" = "Hidden/TerrainEngine/Details/Vertexlit" Dependency "Details1" = "Hidden/TerrainEngine/Details/WavingDoublePass" Dependency "Details2" = "Hidden/TerrainEngine/Details/BillboardWavingDoublePass" Dependency "Tree0" = "Hidden/TerrainEngine/BillboardTree" Fallback "Diffuse" }