Skip to content
Switch branches/tags
Go to file
Cannot retrieve contributors at this time
Shader "Tutorial/008_Planar_Mapping"{
//show values to edit in inspector
_Color ("Tint", Color) = (0, 0, 0, 1)
_MainTex ("Texture", 2D) = "white" {}
//the material is completely non-transparent and is rendered at the same time as the other opaque geometry
Tags{ "RenderType"="Opaque" "Queue"="Geometry"}
#include "UnityCG.cginc"
#pragma vertex vert
#pragma fragment frag
//texture and transforms of the texture
sampler2D _MainTex;
float4 _MainTex_ST;
fixed4 _Color;
struct appdata{
float4 vertex : POSITION;
struct v2f{
float4 position : SV_POSITION;
float2 uv : TEXCOORD0;
v2f vert(appdata v){
v2f o;
//calculate the position in clip space to render the object
o.position = UnityObjectToClipPos(v.vertex);
//calculate world position of vertex
float4 worldPos = mul(unity_ObjectToWorld, v.vertex);
//change UVs based on tiling and offset of texture
o.uv = TRANSFORM_TEX(worldPos.xz, _MainTex);
return o;
fixed4 frag(v2f i) : SV_TARGET{
//read texture at uv position
fixed4 col = tex2D(_MainTex, i.uv);
//multiply texture color with tint color
col *= _Color;
return col;
FallBack "Standard" //fallback adds a shadow pass so we get shadows on other objects