Coding unity shaders with unity visual studio [closed]
Asked Answered
M

2

12

Recently I've been coding shaders for unity in visual studio and I've noticed that since unity shaders are written in a combination of unity's shader lab language and CG, visual studio 2015 doesn't seem to recognize the languages. Because of this, visual studio is not reconizing keywords, has no intellesense, and worse of all tabbing incorrectly whenever I press enter to go to a new line. I've tried this visual studio extension https://visualstudiogallery.msdn.microsoft.com/ed812631-a7d3-4ca3-9f84-7efb240c7bb5 and it doesn't seem to fully work. I was wondering if anyone on here has had experience working with shaders and has an extension they know about to fix this problem.

Meeker answered 29/7, 2016 at 13:49 Comment(7)
I don't think there is a good solution. I would be very interested too.Cohlier
Well I just now found one quick fix for the spacing issue. I switched the tab option in Tools->Options->Text Editor->All Languages->Tabs->Indenting to Block and that seemed to fix the spacing issue, but I'd still like to find a better solution to the problem. Also does anyone know if there is a more specific language that I can put this tab indenting option under, I don't see an option for CG code, and I'd rather I not have tab indenting set to block on all my languages.Meeker
I thought I fixed the spacing, but apparently it's still broken even with this setting.Meeker
check out his page (and the comments for more tools) horsedrawngames.com/…Preoccupancy
@Preoccupancy as far as I can tell none of the comments on that page offer anything for unity shaders aside from "better colors", right? I'm in the same boat as Brandon, spacing is the most troublesome thing, intellisense would be awesome to have. Colors are the least of my problems :)Fret
Oh man, if someone has an answer to this...Plossl
The author of this extension said (3/9/2018) "You can change auto formatting by changing formatting for C++ i vs settings - they are copied on startup of IDE.". I have tried to adjust formatting for C/C++ and this works, except of some cases (for example, SubShader is always has extra indentation for one tab).Dictator
R
2

That plugin should resolve your problem:

ShaderlabVS

It's supports Visual Studio 2013 and 2015. 2017 is on testing stage.

Ribosome answered 28/6, 2017 at 20:41 Comment(0)
S
-1

i bassicly used this for shaders:

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

the part that says "Outline only"

with the description: "The thing that does the trick here is "Blend Zero One" which is to completely forego rendering our object and use only the destination color (i.e. whatever is behind the object). In effect, the object itself is invisible, but we still let the outline render itself. So that's what we're left with: only the outline."

You first need to make a shader script and place it somewhere it suits you i always place this into the folder shaders.

the code is bassicly on the site but to make it easier for you i will paste it in here. be sure to read the code because you can edit this pretty easily from the code or inspector of Unity. hereby the code for the created shaderscript:

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"
}

P.S. can you tell me what kind of shaders you're aiming to make?

Succeed answered 5/12, 2017 at 15:14 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.