- Home /
How am I implementing this grass shader incorrectly?
Hey folks,
I'm trying to follow this tutorial, but I'm running into problems.. can anybody suggest a solution?
I'm supposed to be getting a response like this...
...but instead, my model is showing up as this:
I assume this is to do with the relative positions of the origins on the respective models. Presuming this is to do with world origins... but trying to subtract -5 from the normalised values seems to do very little. My code is as follows...
Shader "RS/LRGrass"
{
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
_WindTex ("Wind Texture", 2D) = "white" {}
_WorldSize ("World Size", vector) = (1,1,1,1)
_WindSpeed ("Wind Speed", vector) = (1,1,1,1)
}
SubShader
{
Tags { "RenderType"="Opaque" }
LOD 200
Pass
{
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
struct vertexInput
{
float4 vertex : POSITION;
float3 normal : NORMAL;
};
struct vertexOutput
{
float4 pos : SV_POSITION;
float3 normal : NORMAL;
float2 sp : TEXCOORD0; //Test sample position
};
sampler2D _WindTex;
vector _WorldSize;
vector _WindSpeed;
vertexOutput vert(vertexInput input)
{
vertexOutput output;
// convert input to clip and world space
output.pos = UnityObjectToClipPos(input.vertex);
float4 normal4 = float4(input.normal, 0.0f);
output.normal = normalize(mul(normal4, unity_WorldToObject).xyz);
// get vertex world position
float4 worldPos = mul(input.vertex, unity_ObjectToWorld);
// normalize position based on world Size
float2 samplePos = worldPos.xz / _WorldSize.xz;
// scroll sample position based on time
// samplePos += _Time.x * _WindSpeed.xy;
// Sample wind texture
//float windSample = tex2Dlod (_WindTex, float4(samplePos, 0, 0));
output.sp = samplePos; // Test sample position.
return output;
};
float4 frag (vertexOutput input) : COLOR
{
return float4(input.sp.x, 0, 0, 1); // Temporary measure!
};
ENDCG
}
/*
CGPROGRAM
// Physically based Standard lighting model, and enable shadows on all light types
#pragma surface surf Standard fullforwardshadows
// Use shader model 3.0 target, to get nicer looking lighting
#pragma target 3.0
sampler2D _MainTex;
struct Input
{
float2 uv_MainTex;
};
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;
}
ENDCG
*/
}
FallBack "Diffuse"
}
Can anybody help me out with this? Really confused here and I'd like to have it sorted soon...!
Your answer
![](https://koobas.hobune.stream/wayback/20220612212155im_/https://answers.unity.com/themes/thub/images/avi.jpg)
Follow this Question
Related Questions
Implementing Custom Vertex Lighting Shader 1 Answer
What are normals? 1 Answer
cast shadow - export lightmap from 3ds max to unity 2 Answers
Culling part of a sprite in Sprite Manager 2 1 Answer
How to remove URP from the project 0 Answers