- Home /
Manually setting normals in shader
I am trying to set all the normals of this Sprite shader to face up in world space.
I'd like the sprite lit as if it were laying horizontally.
In detail, I'm doing this because I want it to evenly react to lighting, regardless of the orientation of the sprite mesh on the vertical plane. To do this I'm trying to light the sprite as if all of its normals are facing up in world space.
I'm new to programaming and am having trouble finding documentation about shader programming. I'm unsure of the correct syntax and even what language I'm using. Thanks a lot for any help!
// Unity built-in shader source. Copyright (c) 2016 Unity Technologies. MIT license (see license.txt)
Shader "Custom/Diffuse"
{
Properties
{
[PerRendererData] _MainTex ("Sprite Texture", 2D) = "white" {}
_Color ("Tint", Color) = (1,1,1,1)
[MaterialToggle] PixelSnap ("Pixel snap", Float) = 0
[HideInInspector] _RendererColor ("RendererColor", Color) = (1,1,1,1)
[HideInInspector] _Flip ("Flip", Vector) = (1,1,1,1)
[PerRendererData] _AlphaTex ("External Alpha", 2D) = "white" {}
[PerRendererData] _EnableExternalAlpha ("Enable External Alpha", Float) = 0
}
SubShader
{
Tags
{
"Queue"="Transparent"
"IgnoreProjector"="True"
"RenderType"="Transparent"
"PreviewType"="Plane"
"CanUseSpriteAtlas"="True"
}
Cull Off
Lighting On
ZWrite Off
Blend One OneMinusSrcAlpha
CGPROGRAM
#pragma surface surf Lambert vertex:vert nofog nolightmap nodynlightmap keepalpha noinstancing
#pragma multi_compile_local _ PIXELSNAP_ON
#pragma multi_compile _ ETC1_EXTERNAL_ALPHA
#include "UnitySprites.cginc"
struct Input
{
float2 uv_MainTex;
fixed4 color;
};
void vert (inout appdata_full v, out Input o)
{
//v.vertex = UnityFlipSprite(v.vertex, _Flip);
#if defined(PIXELSNAP_ON)
v.vertex = UnityPixelSnap (v.vertex);
#endif
UNITY_INITIALIZE_OUTPUT(Input, o);
o.color = v.color * _Color * _RendererColor;
//One attempt here
//float3 worldNormal = UnityObjectToWorldNormal(v.normal);
//v.normal = worldNormal * fixed3(0,0,0);
//v.normal = fixed3(0,0,0);
}
void surf (Input IN, inout SurfaceOutput o)
{
fixed4 c = SampleSpriteTexture (IN.uv_MainTex) * IN.color;
o.Albedo = c.rgb * c.a;
o.Alpha = c.a;
//Another attempt here
//o.Normal = fixed3(0,1,0);
}
ENDCG
}
Fallback "Transparent/VertexLit"
}
Your answer
Follow this Question
Related Questions
Silhouette overlay shader 0 Answers
Displace and show normals in fragment shader 1 Answer
Custom UI Shader Stencil Problem [willing to pay for fix] 1 Answer
Unity Advanced Shader Help 0 Answers