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 stm91 · Dec 02, 2016 at 11:18 AM · shadershader programmingcgshader writing

Shader broke after update from 5.4 to 5.5

I checked the update guide and didn't find anything but i don't know much about shaders.

The problem right now is that the shader turns the object completely invisible instead of showing a colored outline.

http://wiki.unity3d.com/index.php/Silhouette-Outlined_Diffuse

 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" }
             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 4
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 tanoshimi · Dec 02, 2016 at 11:45 AM 0
Share

"broke" how?

avatar image stm91 tanoshimi · Dec 02, 2016 at 11:48 AM 0
Share

It's invisible now. If I disable front culling the entire object has the outline color. So i assume that the part that calculates the outline offset is somehow broken.

avatar image tanoshimi stm91 · Dec 02, 2016 at 11:56 AM 0
Share

I see you're using a fixed function shader in the base pass - have you tried updating it with a basic vert/frag program ins$$anonymous$$d? (Never used fixed function shaders myself, but I know Aras has been trying to get rid of them)

Show more comments

2 Replies

· Add your reply
  • Sort: 
avatar image
1
Best Answer

Answer by tanoshimi · Dec 02, 2016 at 01:02 PM

Replace the fixed function shader by removing:

          SetTexture [_OutlineColor] {
              ConstantColor (0,0,0,0)
              Combine constant
          }

and replacing with:

     CGPROGRAM
         #pragma vertex vert1
         #pragma fragment frag1

         v2f vert1(appdata v) {
             v2f o;
             o.pos = mul(UNITY_MATRIX_MVP, v.vertex);
             return o;
         }

         half4 frag1(v2f i) :COLOR{
             return half4(1,1,1,1);
         }
     ENDCG
Comment
Add comment · Show 3 · 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
avatar image stm91 · Dec 02, 2016 at 01:19 PM 0
Share

Thanks for the reply, sadly I'm not seeing any change in behaviour. It's still invisible. Interestingly though, (this was the case before your changes as well) if i clip the camera through the object, it appears as if the inside/back faces of the mesh are colored with the outline color.

avatar image tanoshimi stm91 · Dec 02, 2016 at 02:18 PM 0
Share

Really? Works for me. Perhaps the scale of your object is funky. What happens if you change _Outline ("Outline width", Range (0.0, 0.03)) = .005 to, say, _Outline ("Outline width", Range (0.0, 1)) = 1 and then really ramp up the outline width?

avatar image stm91 tanoshimi · Dec 02, 2016 at 02:31 PM 0
Share

That's interesting, it works now, with the lines being barely visible at maximum width. Though scaling is and was uniformly at 1,1,1 on every object and I didn't change anything besides upgrading from 5.4 to 5.5.

It does look as if the object was scaled, with the outline not connecting at the corners.

This is how it looks on a standard cube with the width all the way up: http://imgur.com/a/5ih5L

avatar image
1

Answer by EdwinLyons · Feb 21, 2017 at 02:10 PM

You need to change this line:

 o.pos.xy += offset * o.pos.z * _Outline;

to:

 #ifdef UNITY_Z_0_FAR_FROM_CLIPSPACE
     float z = UNITY_Z_0_FAR_FROM_CLIPSPACE(o.pos.z); 
 #else
     float z = o.pos.z;
 #endif
 o.pos.xy += offset * z * _Outline;

This is due to the z depth being reversed on Unity 5.5.

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

5 People are following this question.

avatar image avatar image avatar image avatar image avatar image

Related Questions

Dissolve Shader Problem 1 Answer

Triplanar shaders that use the position and rotation of the attached object (or local Triplanar shaders) 0 Answers

CRT shader but NOT for camera 0 Answers

Shader graph is broken pink and after installed packages a lot of errors. How can I resolve all this ? 0 Answers

Shader: Mask Without a Texture? 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