Wayback Machinekoobas.hobune.stream
May JUN Jul
Previous capture 12 Next capture
2021 2022 2023
1 capture
12 Jun 22 - 12 Jun 22
sparklines
Close Help
  • 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 globalenemy · Apr 11, 2016 at 08:03 PM · shaderterrainoutline

outline shader problems

I'm having trouble to queue my Outline.

http://imgur.com/a/6p8xe

I can't get it to be allways drawn on front of everything. Can you please help me? all the stuff I'm doing doesn't seem to have any effect to my outline object.


Script I'm using (present on several objects. also on the outline object. to set the queue):

 /*
     SetRenderQueue.cs
  
     Sets the RenderQueue of an object's materials on Awake. This will instance
     the materials, so the script won't interfere with other renderers that
     reference the same materials.
 */
 
 using System.Collections.Generic;
 using UnityEngine;
 
 [AddComponentMenu("Rendering/SetRenderQueue")]
 
 public class SetRenderQueue : MonoBehaviour
 {
 
    [SerializeField]
    protected int[] m_queues = new int[] { 3000 };
 
    protected void Awake() {
       Renderer[] rr = GetComponents<Renderer>();
       List<Material> materials = new List<Material>();
       foreach (Renderer r in rr) {
          materials.AddRange(r.materials);
       }
       Terrain t = GetComponent<Terrain>();
       if (t) materials.Add(t.materialTemplate);
       for (int i = 0; i < materials.Count && i < m_queues.Length; ++i) {
          materials[i].renderQueue = m_queues[i];
       }
       enabled = false;
    }
 }

Shader I'm using:

 Shader "Outlined/Silhouette Only" {
     Properties {
         _OutlineColor ("Outline Color", Color) = (0,0,0,1)
         _Outline ("Outline width", Range (0.0, 0.03)) = .005
     }
  
 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) {
     // just make a copy of incoming vertex data but scaled according to normal direction
     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 { "Queue" = "Transparent" }
  
         Pass {
             Name "BASE"
             Cull Back
             Blend Zero One
  
             // uncomment this to hide inner details:
             //Offset -8, -8
  
             SetTexture [_OutlineColor] {
                 ConstantColor (0,0,0,0)
                 Combine constant
             }
         }
  
         // note that a vertex shader is specified here but its using the one above
         Pass {
             Name "OUTLINE"
             Tags { "LightMode" = "Always" "Queue" = "Overlay"}
             Cull Front
  
             // you can choose what kind of blending mode you want for the outline
             //Blend SrcAlpha OneMinusSrcAlpha // Normal
             //Blend One One // Additive
             Blend One OneMinusDstColor // Soft Additive
             //Blend DstColor Zero // Multiplicative
             //Blend DstColor SrcColor // 2x Multiplicative
  
 CGPROGRAM
 #pragma vertex vert
 #pragma fragment frag
  
 half4 frag(v2f i) :COLOR {
     return i.color;
 }
 ENDCG
         }
  
  
     }
  
     Fallback "Diffuse"
 }




Comment
Add comment · Show 5
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
avatar image Namey5 · Apr 13, 2016 at 01:36 PM 0
Share

Z-testing?

avatar image globalenemy Namey5 · Apr 13, 2016 at 02:43 PM 0
Share

wow, 3 days and everything I get is a 10 character comment.

"Z-Testing" I dont' know what that is, why are you asking a question in my question? is that question for me? what does it mean?

avatar image Namey5 globalenemy · Apr 13, 2016 at 11:31 PM 0
Share

Sorry, was in a bit of a hurry. Was wondering if you had tried Z-Testing.

http://docs.unity3d.com/$$anonymous$$anual/SL-CullAndDepth.html (3rd one down)

You can use Z-Testing in the shaderlab before CG/inside a pass to change how the object is drawn. I think 'greater' draws it in front of everything else.

avatar image globalenemy Namey5 · Apr 15, 2016 at 03:23 PM 0
Share

I played with the shader a bit, tested ZTest and some Blend stuff also swichted passes arround. I'm pretty sure this all has to do something with how to fix it, but I can't find the right combinations. I don't know much about shader writing. I wrote some stuff, and this one looks very strange compared to what I've learned yet.

avatar image meat5000 ♦ globalenemy · Apr 15, 2016 at 03:31 PM 0
Share

This was my Goto

https://en.wikibooks.org/wiki/Cg_Program$$anonymous$$g/Unity

1 Reply

· Add your reply
  • Sort: 
avatar image
0

Answer by tanoshimi · Apr 15, 2016 at 05:33 PM

Try modifying the start of your subshader to be...

 SubShader {
     Tags { 
         "Queue"="Overlay+1" 
     }
     ZWrite Off
     ZTest Always
     ...
Comment
Add comment · Share
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

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.

Follow this Question

Answers Answers and Comments

58 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 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 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 avatar image

Related Questions

Terrain material makes textures blurry 1 Answer

Combine Shaders 0 Answers

Billboard trees glow white in dark scene. 2 Answers

Is there a shader to draw outline of a solid sphere in unity 20.1.0a12 , that works in unity WebGL? 0 Answers

Objects visible through terrain 2 Answers


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