• Products
  • Solutions
  • Made with Unity
  • Learning
  • Support & Services
  • Community
  • Asset Store
  • Get Unity

UNITY ACCOUNT

You need a Unity Account to shop in the Online and Asset Stores, participate in the Unity Community and manage your license portfolio. Login Create account
  • Blog
  • Forums
  • Answers
  • Evangelists
  • User Groups
  • Beta Program
  • Advisory Panel

Navigation

  • Home
  • Products
  • Solutions
  • Made with Unity
  • Learning
  • Support & Services
  • Community
    • Blog
    • Forums
    • Answers
    • Evangelists
    • User Groups
    • Beta Program
    • Advisory Panel

Unity account

You need a Unity Account to shop in the Online and Asset Stores, participate in the Unity Community and manage your license portfolio. Login Create account

Language

  • Chinese
  • Spanish
  • Japanese
  • Korean
  • Portuguese
  • Ask a question
  • Spaces
    • Default
    • Help Room
    • META
    • Moderators
    • Topics
    • Questions
    • Users
    • Badges
  • Home /
avatar image
0
Question by Jix · Apr 26, 2015 at 12:18 PM · shadershader programming

Make a shader to be able to receive shadows

I have this custom Shader, it is toon outlined shader that can cast shadows and can become transparent, I need to modify it to be able to receive shadows as well I have a very limited knowledge in Shaders. I made it by copy-paste from other Shaders.

 Shader "Custom/BuildingShader" {
     Properties {
          _Color ("Main Color", Color) = (.5,.5,.5,1)
          _OutlineColor ("Outline Color", Color) = (0,0,0,1)
          _Outline ("Outline width", Range (.002, 0.03)) = .005
          _MainTex ("Base (RGB)", 2D) = "white" { }
          _ToonShade ("ToonShader Cubemap(RGB)", CUBE) = "" { Texgen CubeNormal }
      }
  
  CGINCLUDE
  #include "UnityCG.cginc"
  
  struct appdata {
      float4 vertex : POSITION;
      float3 normal : NORMAL;
  };
  
  struct v2f {
      float4 pos : POSITION;
      float4 color : COLOR;
  };
  
  uniform float _Outline;
  uniform float4 _OutlineColor;
  
  v2f vert(appdata v) {
      v2f o;
      o.pos = mul(UNITY_MATRIX_MVP, v.vertex);
  
      float3 norm   = mul ((float3x3)UNITY_MATRIX_IT_MV, v.normal);
      float2 offset = TransformViewToProjection(norm.xy);
  
      o.pos.xy += offset * o.pos.z * _Outline;
      o.color = _OutlineColor;
      return o;
  }
  ENDCG
  
  SubShader {
      Tags { "RenderType"="Opaque" "Queue"="Transparent" }
      UsePass "Custom/ToonBasic-Alpha/BASE"
      Pass {
          Name "OUTLINE"
          Tags { "LightMode" = "Always" }
          Cull Front
          ZWrite On
          ColorMask RGB
          Blend SrcAlpha OneMinusSrcAlpha
  
          CGPROGRAM
          #pragma vertex vert
          #pragma fragment frag
          half4 frag(v2f i) :COLOR { return i.color; }
          ENDCG
      }
  }
  
  SubShader {
      Tags { "RenderType"="Opaque" "Queue"="Transparent"}
      UsePass "Custom/ToonBasic-Alpha/BASE"
      Pass {
          Name "OUTLINE"
          Tags { "LightMode" = "Always" }
          Cull Front
          ZWrite On
          ColorMask RGB
          Blend SrcAlpha OneMinusSrcAlpha
  
          CGPROGRAM
          #pragma vertex vert
          #pragma exclude_renderers shaderonly
          ENDCG
          SetTexture [_MainTex] { combine primary }
      }
  }
 
  Fallback "Toon/Basic"
 }

And here's the ToonBasic-Alpha Shader as well

 Shader "Custom/ToonBasic-Alpha" {
     Properties {
          _Color ("Main Color", Color) = (.5,.5,.5,1)
          _MainTex ("Base (RGB)", 2D) = "white" {}
          _ToonShade ("ToonShader Cubemap(RGB)", CUBE) = "" { Texgen CubeNormal }
      }
  
  SubShader {
      Tags { "RenderType"="Opaque" "Queue"="Transparent" }
      Pass {
          Name "BASE"
          Blend SrcAlpha OneMinusSrcAlpha
  
          CGPROGRAM
          #pragma vertex vert
          #pragma fragment frag
          #pragma fragmentoption ARB_precision_hint_fastest 
  
          #include "UnityCG.cginc"
  
          sampler2D _MainTex;
          samplerCUBE _ToonShade;
          float4 _MainTex_ST;
          float4 _Color;
  
          struct appdata {
              float4 vertex : POSITION;
              float2 texcoord : TEXCOORD0;
              float3 normal : NORMAL;
          };
          
          struct v2f {
              float4 pos : POSITION;
              float2 texcoord : TEXCOORD0;
              float3 cubenormal : TEXCOORD1;
          };
  
          v2f vert (appdata v)
          {
              v2f o;
              o.pos = mul (UNITY_MATRIX_MVP, v.vertex);
              o.texcoord = TRANSFORM_TEX(v.texcoord, _MainTex);
              o.cubenormal = mul (UNITY_MATRIX_MV, float4(v.normal,0));
              return o;
          }
  
          float4 frag (v2f i) : COLOR
          {
              float4 col = _Color * tex2D(_MainTex, i.texcoord);
              float4 cube = texCUBE(_ToonShade, i.cubenormal);
              return float4(2.0f * cube.rgb * col.rgb, col.a);
          }
          ENDCG            
      }
  } 
  
  SubShader {
      Tags { "RenderType"="Opaque" "Queue"="Transparent"}
      Pass {
          Name "BASE"
          SetTexture [_MainTex] {
              constantColor [_Color]
              Combine texture * constant
          } 
          SetTexture [_ToonShade] {
              combine texture * previous DOUBLE, previous
          }
      }
  } 
  
  Fallback "VertexLit"
 }
 
Comment
Add comment
10 |3000 characters needed characters left characters exceeded
▼
  • Viewable by all users
  • Viewable by moderators
  • Viewable by moderators and the original poster
  • Advanced visibility
Viewable by all users

0 Replies

· Add your reply
  • Sort: 

Your answer

Hint: You can notify a user about this post by typing @username

Up to 2 attachments (including images) can be used with a maximum of 524.3 kB each and 1.0 MB total.

Welcome to Unity Answers

If you’re new to Unity Answers, please check our User Guide to help you navigate through our website and refer to our FAQ for more information.

Before posting, make sure to check out our Knowledge Base for commonly asked Unity questions.

Check our Moderator Guidelines if you’re a new moderator and want to work together in an effort to improve Unity Answers and support our users.

Follow this Question

Answers Answers and Comments

19 People are following this question.

avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image

Related Questions

Generating a texture through Graphics.Blit with shadergraph 0 Answers

UnityObjectToClipPos is inverted? 0 Answers

How to add metallic and smoothness to a frag shader? 1 Answer

Why is my UV'd texture displaying wrapped with the wrong scale? 0 Answers

Objects Go Into Shadow as Soon as They are Outside of a Point Light's Range 1 Answer


Enterprise
Social Q&A

Social
Subscribe on YouTube social-youtube Follow on LinkedIn social-linkedin Follow on Twitter social-twitter Follow on Facebook social-facebook Follow on Instagram social-instagram

Footer

  • Purchase
    • Products
    • Subscription
    • Asset Store
    • Unity Gear
    • Resellers
  • Education
    • Students
    • Educators
    • Certification
    • Learn
    • Center of Excellence
  • Download
    • Unity
    • Beta Program
  • Unity Labs
    • Labs
    • Publications
  • Resources
    • Learn platform
    • Community
    • Documentation
    • Unity QA
    • FAQ
    • Services Status
    • Connect
  • About Unity
    • About Us
    • Blog
    • Events
    • Careers
    • Contact
    • Press
    • Partners
    • Affiliates
    • Security
Copyright © 2020 Unity Technologies
  • Legal
  • Privacy Policy
  • Cookies
  • Do Not Sell My Personal Information
  • Cookies Settings
"Unity", Unity logos, and other Unity trademarks are trademarks or registered trademarks of Unity Technologies or its affiliates in the U.S. and elsewhere (more info here). Other names or brands are trademarks of their respective owners.
  • Anonymous
  • Sign in
  • Create
  • Ask a question
  • Spaces
  • Default
  • Help Room
  • META
  • Moderators
  • Explore
  • Topics
  • Questions
  • Users
  • Badges