Saya telah mengerjakan shader khusus untuk proyek menggunakan Unity 4.6 karena shader Unity menawarkan beragam pilihan tetapi bukan yang saya cari. Saya telah melihat Stackoverflow tentang masalah shader saya, tetapi setiap pertanyaan adalah tentang masalah rumit dan sangat teknis menggunakan shader. Menurut saya, milik saya cukup sederhana (untuk pengembang berpengalaman) tetapi belum diposting.
Inilah masalahnya: Saya ingin menggabungkan 2 shader untuk mendapatkan shader "Diffuse+normal+cubemap+lighmap".
Jadi, di satu sisi saya memiliki shader "Diffuse + NormalMap + LightMap" yang terlihat seperti ini (ini adalah legacy/lighmap bumpedspec a dengan sedikit penyesuaian untuk mendapatkan kilau specular):
Shader "Legacy Shaders/Lightmapped/Custom/BumpedSpec" {
Properties {
_Color ("Main Color", Color) = (1,1,1,1)
_SpecColor ("Specular Color", Color) = (0.5, 0.5, 0.5, 1)
_Shininess ("Shininess", Range (0.03, 1)) = 0.078125
_MainTex ("Base (RGB)", 2D) = "white" {}
_BumpMap ("Normalmap", 2D) = "bump" {}
_LightMap ("Lightmap (RGB)", 2D) = "black" {}
}
SubShader {
LOD 200
Tags { "RenderType" = "Opaque" }
CGPROGRAM
#pragma surface surf BlinnPhong
struct Input {
float2 uv_MainTex;
float2 uv_BumpMap;
float2 uv2_LightMap;
};
sampler2D _MainTex;
sampler2D _LightMap;
sampler2D _BumpMap;
float4 _Color;
float _Shininess;
void surf (Input IN, inout SurfaceOutput o)
{
half4 tex = tex2D (_MainTex, IN.uv_MainTex);
o.Albedo = tex.rgb * _Color;
half4 lm = tex2D (_LightMap, IN.uv2_LightMap);
o.Emission = lm.rgb*o.Albedo.rgb;
o.Gloss = tex.a;
o.Alpha = lm.a * _Color.a;
o.Specular = _Shininess;
o.Normal = UnpackNormal(tex2D(_BumpMap, IN.uv_BumpMap));
}
ENDCG
}
FallBack "Legacy Shaders/Lightmapped/VertexLit"
}
Dan di sisi lain, saya punya shader dengan "Diffuse+cubemap+Lightmap" yang terlihat seperti ini :
Shader "Custom/CubeLightmap" {
Properties {
_Color ("Main Color", Color) = (1,1,1,1)
_ReflectColor ("Reflection Color", Color) = (1,1,1,0.5)
_MainTex ("Base (RGB) RefStrength (A)", 2D) = "white" {}
_Cube ("Reflection Cubemap", Cube) = "_Skybox" { TexGen CubeReflect }
_LightMap ("Lightmap (RGB)", 2D) = "lightmap" { LightmapMode }
}
SubShader {
LOD 200
Tags { "RenderType"="Opaque" }
CGPROGRAM
#pragma surface surf Lambert
sampler2D _MainTex;
samplerCUBE _Cube;
sampler2D _LightMap;
fixed4 _Color;
fixed4 _ReflectColor;
struct Input {
float2 uv_MainTex;
float3 worldRefl;
float2 uv2_LightMap;
};
void surf (Input IN, inout SurfaceOutput o) {
fixed4 tex = tex2D(_MainTex, IN.uv_MainTex);
fixed4 c = tex * _Color;
o.Albedo = c.rgb;
half4 lm = tex2D(_LightMap,IN.uv2_LightMap);
fixed4 reflcol = texCUBE (_Cube, IN.worldRefl);
reflcol *= tex.a;
o.Emission = lm.rgb * reflcol.rgb * _ReflectColor.rgb;
o.Alpha = reflcol.a * _ReflectColor.a * lm.a;
}
ENDCG
}
FallBack "Reflective/VertexLit"
}
Jadi saya ingin menggabungkan keduanya (alias menyertakan peta kubus di yang pertama atau menyertakan peta normal di yang kedua) dan saya tidak dapat memahaminya untuk saat ini.
Jadi saya membutuhkan saran atau bantuan untuk mencapainya.
Terima kasih sebelumnya, Salam