- Home /
[Unity Free]Add textures to existing Unity DOF Shader
Hello again,
I don't own Unity Pro, so the standard 'Depth of Field' option is not available to me. So I have set out to either finding a Shader online or making it myself, I have found a Shader in the Asset store made by Unity but it doesn't support textures so I tried to add that Property, but with no luck. Honestly I'm just really not sure what I'm doing.
Error Messages:
][1]
Original Code:
Shader "Hidden/Render Depth" {
SubShader {
Tags { "RenderType"="Opaque" }
Pass {
Fog { Mode Off }
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "UnityCG.cginc"
struct v2f {
float4 pos : POSITION;
#ifdef UNITY_MIGHT_NOT_HAVE_DEPTH_TEXTURE
float2 depth : TEXCOORD0;
#endif
};
v2f vert( appdata_base v ) {
v2f o;
o.pos = mul(UNITY_MATRIX_MVP, v.vertex);
UNITY_TRANSFER_DEPTH(o.depth);
return o;
}
half4 frag(v2f i) : COLOR {
UNITY_OUTPUT_DEPTH(i.depth);
}
ENDCG
}
}
Fallback Off
}
Modified Code:
//============================================================================//
//=========================Titel: 5_DOF-texture.shader========================//
//===================Autor: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX===================//
//==============================Datum: 03.04.2014=============================//
//=================Beschreibung: Depth of Field-Texture Shader================//
//============================================================================//
Shader "Selfish Studio/5 - DOF Texture" {
Properties { //Define any changeable properties here
_Color ("Color Tint", Color) = (1.0,1.0,1.0,1.0)
_MainTex ("Diffuse Texture", 2D) = "white" {}
}
SubShader { //Main Shader
Pass {
Tags { "LightMode"="ForwardBase" }
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "UnityCG.cginc"
//User defined variables
uniform sampler2D _MainTex;
uniform float4 _MainTex_ST;
uniform float4 _Color;
//Unity defined variables
uniform float4 _LightColor0;
//Base input structs
struct vertexInput{
float4 vertex : POSITION;
float3 normal : NORMAL;
float4 texcoord : TEXCOORD1;
#ifdef UNITY_MIGHT_NOT_HAVE_DEPTH_TEXTURE
float2 depth : TEXCOORD0;
#endif
};
struct vertexOutput{
float4 pos : SV_POSITION;
float4 tex : TEXCOORD1;
float4 posWorld : TEXCOORD2;
float3 normalDir : TEXCOORD3;
};
//vertex function
vertexOutput vert(vertexInput v){
vertexOutput o;
UNITY_TRANSFER_DEPTH(o.depth);
o.posWorld = mul(_Object2World, v.vertex);
o.normalDir = normalize( mul( float4( v.normal, 0.0 ), _World2Object ).xyz );
o.pos = mul (UNITY_MATRIX_MVP, v.vertex);
o.tex = v.texcoord;
return o;
//fragment function
float4 frag(vertexOutput i) : COLOR
{
UNITY_OUTPUT_DEPTH(i.depth);
float3 normalDirection = i.normalDir;
float3 viewDirection = normalize( _WorldSpaceCameraPos.xyz - i.posWorld.xyz );
float3 lightDirection;
float atten;
if(_WorldSpaceLightPos0.w == 0.0){
atten = 1.0;
lightDirection = normalize(_WorldSpaceLightPos0.xyz);
}
else{
float3 fragmentToLightSource = _WorldSpaceLightPos0.xyz - i.posWorld.xyz;
float distance = length(fragmentToLightSource);
atten = 1.0/distance;
lightDirection = normalize(fragmentToLightSource);
}
//Lighting
float3 diffuseReflection = atten * _LightColor0.xyz * saturate(dot(normalDirection, lightDirection));
float3 lightFinal = diffuseReflection + UNITY_LIGHTMODEL_AMBIENT.xyz;
//Textures
float4 tex = tex2D(_MainTex, i.tex.xy * _MainTex_ST.xy + _MainTex_ST.zw);
return float4(tex.xyz * lightFinal * _Color.xyz, 1.0 * i.depth);
}
ENDCG
}
}
Fallback "Diffuse"
}
Thanks in Advance :D
Your answer
Follow this Question
Related Questions
Creating a shader that overlaps a diffuse with a TexGen ObjectLinear cutout 0 Answers
Shaderlab metallic map 0 Answers
What is the right way to modify depth of field focal distance via script at runtime? 1 Answer
Shader: 1 Base Texture Overlaid by 1 Transparent Texture. 0 Answers
Script vs Shader for animated texture 5 Answers