Custom opaque shader looks transparent
Hi,
I am experimenting with shaders. I followed some tutorials and have the below shader code.
I have set everywhere possible to make sure the material is opaque, but i still can see some portions under the texture.
Please share your inputs.
Settings changed: Texture, Alpha Source is set to 'None'
Material, Alpha in the color is set to '255'
But when i play it, as you can see, a part of the boat under the water is still visible.
I have the below code inside the shader:
// Upgrade NOTE: replaced '_Object2World' with 'unity_ObjectToWorld'
// Upgrade NOTE: replaced '_Object2World' with 'unity_ObjectToWorld'
Shader "Custom/SineWaves"
{
Properties
{
_Color ("Color", Color) = (1,1,1,1)
_MainTex ("Albedo (RGB)", 2D) = "white" {}
_Glossiness ("Smoothness", Range(0,1)) = 0.5
_Metallic ("Metallic", Range(0,1)) = 0.0
//>>>Joshua
_WaveHeight("WaveHeight", Float) = 1
_WaveLength("WaveLength", Float) = 10
_WaveSpeed("WaveSpeed", Float) = 10
_WindDirection("WindDirection (2D)", Vector) = (1,0,0,0)
//<<<Joshua
}
SubShader
{
//>>>Joshua
Tags { "RenderType"="Opaque" }
//Tags { "RenderType" = "Transparent" "Queue" = "Transparent"} //Joshua
//<<<Joshua
LOD 200
CGPROGRAM
// Physically based Standard lighting model, and enable shadows on all light types
//>>>Joshua
//#pragma surface surf Standard fullforwardshadows
#pragma surface surf Standard vertex:vert //alpha:fade//fullforwardshadows //addshadow //Joshua
//#include "LookingThroughWater.cginc" //Joshua
//<<<Joshua
// Use shader model 3.0 target, to get nicer looking lighting
#pragma target 3.0
sampler2D _MainTex;
struct Input
{
float2 uv_MainTex;
//>>>Joshua
//float4 screenPos; //Joshua
//<<<Joshua
};
half _Glossiness;
half _Metallic;
fixed4 _Color;
// Add instancing support for this shader. You need to check 'Enable Instancing' on materials that use the shader.
// See https://docs.unity3d.com/Manual/GPUInstancing.html for more information about instancing.
// #pragma instancing_options assumeuniformscaling
UNITY_INSTANCING_BUFFER_START(Props)
// put more per-instance properties here
UNITY_INSTANCING_BUFFER_END(Props)
void surf (Input IN, inout SurfaceOutputStandard o)
{
// Albedo comes from a texture tinted by color
fixed4 c = tex2D (_MainTex, IN.uv_MainTex) * _Color;
o.Albedo = c.rgb;
// Metallic and smoothness come from slider variables
o.Metallic = _Metallic;
o.Smoothness = _Glossiness;
o.Alpha = c.a;
//>>>Joshua
//o.Albedo = ColorBelowWater(IN.screenPos); //Joshua
//o.Alpha = 1; //Joshua
//<<<Joshua
}
//https://catlikecoding.com/unity/tutorials/flow/waves/
//>>>>Joshua
float _WaveHeight, _WaveLength, _WaveSpeed;
float2 _WindDirection;
void vert(inout appdata_full vertexData)
{
float3 p_local = vertexData.vertex.xyz;
float3 p_global = mul(unity_ObjectToWorld, vertexData.vertex).xyz;
float2 d = normalize(_WindDirection);
float k = 2 * UNITY_PI / _WaveLength;
//float f = (k * (p_global.x - _WaveSpeed * _Time.y));
float f = (k * (dot(d, p_global.xz) - _WaveSpeed * _Time.y));
p_local.y = _WaveHeight * sin(f);
//float3 tangent = normalize(float3(1, k * _WaveHeight * cos(f), 0));
//float3 normal = float3(-tangent.y, tangent.x, 0);
vertexData.vertex.xyz = p_local;
//vertexData.normal = normal;
}
//<<<Joshua
ENDCG
}
//>>>Joshua
//FallBack "Diffuse"
//<<<Joshua
}
Thanks, Joshua.
Your answer
Follow this Question
Related Questions
Transparency of a specific area 0 Answers
Problem with Standard shader transparency 0 Answers
Writing a shader that allows both opaque and transparent blending 1 Answer
Switching shader back and forth fixes transparency issue? 0 Answers
Transperent Side of a Texture becomes black in Shader PBR Graph 1 Answer