Wayback Machinekoobas.hobune.stream
May JUN Jul
Previous capture 13 Next capture
2021 2022 2023
1 capture
13 Jun 22 - 13 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 Borzi · Oct 22, 2013 at 07:34 PM · shaderheightmapocclusionspecular

Adding Occlusion and Specular Map to Shader?

Hey, I modified one a Parallax shader from the forum which already included the Occlusion effect, but when I tried adding the specular map I stumbled into a problem: when I add the shader, it shows a purple material. Anybody know what I did wrong?

Here is the code for the shader:

 hader "Parallax Specular Occlusion" {
 
 Properties {
 
     _Color ("Main Color", Color) = (1,1,1,1)
     _SpecColor ("Specular Color", Color) = (0.5, 0.5, 0.5, 1)
     _Shininess ("Shininess", Range (0.01, 1)) = 0.078125
     _Parallax ("Height", Range (0.005, 0.08)) = 0.02
     _MainTex ("Base (RGB) Gloss (A)", 2D) = "white" {}
     _SpecMap ("Specular map", 2D) = "black" {}
     _BumpMap ("Normalmap", 2D) = "bump" {}
     _ParallaxMap ("Heightmap (A)", 2D) = "black" {}
     _Occlusion ("Occlusion Map", 2D) = "white" {}
 
 }
 
 SubShader { 
 
     Tags { "RenderType"="Opaque" }
 
     LOD 400
 
 CGPROGRAM
 
 #pragma surface surf BlinnPhong
 
 #pragma target 3.0
 
 sampler2D _MainTex;
 sampler2D _BumpMap;
 sampler2D _SpecularMap;
 sampler2D _ParallaxMap;
 sampler2D _Occlusion;
 fixed4 _Color;
 half _Shininess;
 float _Parallax;
 
 struct Input {
 
     float2 uv_MainTex;
     float2 uv_BumpMap;    
     float2 uv_SpecMap;
     float3 viewDir;
 
 };
 
 void surf (Input IN, inout SurfaceOutput o) {
 
     half h = tex2D (_ParallaxMap, IN.uv_BumpMap).w;
     float2 offset = ParallaxOffset (h, _Parallax, IN.viewDir);
     IN.uv_MainTex += offset;
     IN.uv_BumpMap += offset;
 
     fixed4 tex = tex2D(_MainTex, IN.uv_MainTex);
     fixed4 Occ = tex2D(_Occlusion, IN.uv_MainTex);   
     fixed4 specTex = tex2D(_SpecMap, IN.uv_SpecMap);
 
     o.Albedo = tex.rgb * _Color.rgb * Occ.rgb;
     o.Gloss = specTex.r;
     o.Alpha = tex.a * _Color.a;
     o.Specular = _Shininess * specTex.g;
     o.Normal = UnpackNormal(tex2D(_BumpMap, IN.uv_BumpMap));
 
 }
 
 ENDCG
 
 }
 
 FallBack "Specular"
 }
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 meat5000 ♦ · Oct 22, 2013 at 08:00 PM 0
Share

The Parallax Specular Occlusion isn't a Unity shader. Someone posted it on a forum somewhere.

It already incorporates Spec shading but I think it's derived from the Diffuse in this case.

$$anonymous$$aybe start here?

avatar image Borzi · Oct 22, 2013 at 08:03 PM 0
Share

Oh yeah right, this is what I used. I forgot, I got the occlusion from this guy and tried to add specularity as well. Wait I'll change that in the question.

avatar image meat5000 ♦ · Oct 22, 2013 at 08:05 PM 0
Share

Check the spec in this one

 Shader "Bumped Anisotropic Specular" {
 Properties {
 _Color ("$$anonymous$$ain Color", Color) = (1,1,1,1)
 _$$anonymous$$ainTex ("Diffuse (RGB) Alpha (A)", 2D) = "white" {}
 _SpecularTex ("Specular (R) Gloss (G) Anisotropic $$anonymous$$ask (B)", 2D) = "gray" {}
 _Bump$$anonymous$$ap ("Normal (Normal)", 2D) = "bump" {}
 _AnisoTex ("Anisotropic Direction (RGB)", 2D) = "bump" {}
 _AnisoOffset ("Anisotropic Highlight Offset", Range(-1,1)) = -0.2
 _Cutoff ("Alpha Cut-Off Threshold", Range(0,1)) = 0.5
 }
 
 SubShader{
 Tags { "RenderType" = "Opaque" }
 
 CGPROGRA$$anonymous$$
 
 struct SurfaceOutputAniso {
 fixed3 Albedo;
 fixed3 Normal;
 fixed4 AnisoDir;
 fixed3 Emission;
 half Specular;
 fixed Gloss;
 fixed Alpha;
 };
 
 float _AnisoOffset, _Cutoff;
 inline fixed4 LightingAniso (SurfaceOutputAniso s, fixed3 lightDir, fixed3 viewDir, fixed atten)
 {
 fixed3 h = normalize(normalize(lightDir) + normalize(viewDir));
 float NdotL = saturate(dot(s.Normal, lightDir));
 
 fixed HdotA = dot(normalize(s.Normal + s.AnisoDir.rgb), h);
 float aniso = max(0, sin(radians((HdotA + _AnisoOffset) * 180)));
 
 float spec = saturate(dot(s.Normal, h));
 spec = saturate(pow(lerp(spec, aniso, s.AnisoDir.a), s.Gloss * 128) * s.Specular);
 
 fixed4 c;
 c.rgb = ((s.Albedo * _LightColor0.rgb * NdotL) + (_LightColor0.rgb * spec)) * (atten * 2);
 c.a = 1;
 clip(s.Alpha - _Cutoff);
 return c;
 }
 
 #pragma surface surf Aniso
 #pragma target 3.0
 
 struct Input
 {
 float2 uv_$$anonymous$$ainTex;
 float2 uv_AnisoTex;
 };
 
 sampler2D _$$anonymous$$ainTex, _SpecularTex, _Bump$$anonymous$$ap, _AnisoTex;
 
 void surf (Input IN, inout SurfaceOutputAniso o)
 {
 fixed4 albedo = tex2D(_$$anonymous$$ainTex, IN.uv_$$anonymous$$ainTex);
 o.Albedo = albedo.rgb;
 o.Alpha = albedo.a;
 o.Normal = UnpackNormal(tex2D(_Bump$$anonymous$$ap, IN.uv_$$anonymous$$ainTex));
 fixed3 spec = tex2D(_SpecularTex, IN.uv_$$anonymous$$ainTex).rgb;
 o.Specular = spec.r;
 o.Gloss = spec.g;
 o.AnisoDir = fixed4(tex2D(_AnisoTex, IN.uv_AnisoTex).rgb, spec.b);
 }
 ENDCG
 }
 FallBack "Transparent/Cutout/VertexLit"
 }
avatar image Borzi · Oct 23, 2013 at 05:25 AM 0
Share

Cool, i'll see to that, still curious if someone could fix my code though. Is Vertex Specular Lighting better then what I used? I simply got my code for specular map from here:

Add specular map to Shader - Unity Answers

avatar image Borzi · Oct 23, 2013 at 02:45 PM 0
Share
 // surface shader with errors was here
 
 Pass { }
 
 /*// error compiling initial surface function 'surf':
 
 #include "HLSLSupport.cginc"
 #include "UnityShaderVariables.cginc"
 #include "Lighting.cginc"
 #include "UnityCG.cginc"
 #include "Lighting.cginc"
 
 #define INTERNAL_DATA
 #define WorldReflectionVector(data,normal) data.worldRefl
 #define WorldNormalVector(data,normal) normal
 #line 1
 #line 34

Some of the errors the shader compiler found. Anyone know what this means?

1 Reply

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

Answer by Borzi · Oct 24, 2013 at 05:28 AM

Problem is fixed here, it was quite easy and I'm not sure if it actually is working properly, at least it does not show pink cube:

Answer

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

15 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

Related Questions

Shader Problem 1 Answer

Shaders and ambient occlusion 1 Answer

Cartoon specular, regular diffuse, fresnel reflective? 1 Answer

Spec only Shader, Again. 1 Answer

Fake specular shader for a sphere? 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