Hololens2 单眼显示问题

这篇博客介绍了如何在Unity中实现线框渲染。作者提供了两种方法,一是使用MRTK自带的shader,二是自定义shader。在自定义shader的代码示例中,可以看到在顶点着色器和片段着色器中如何处理边缘检测和颜色混合。这适用于需要线框视觉效果的游戏或应用开发。

法1:使用mrtk自带的shader

使用MRTK中自带的shader
请添加图片描述

法2:自定义shader

  • a2v 中添加 UNITY_VERTEX_INPUT_INSTANCE_ID

  • v2f 中添加 UNITY_VERTEX_OUTPUT_STEREO

  • vert 中添加

    ​ UNITY_SETUP_INSTANCE_ID(v); //Insert
    ​ UNITY_INITIALIZE_OUTPUT(v2f, o); //Insert
    ​ UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o); //Insert

    demo

Shader "JaffHan/Wireframe" {
Properties {
        _Color("Color",Color)=(1.0,1.0,1.0,1.0)
        _EdgeColor("Edge Color",Color)=(1.0,1.0,1.0,1.0)
        _Width("Width",Range(0,1))=0.2
    }
SubShader {

    Pass {
    CGPROGRAM
    #pragma vertex vert
    #pragma fragment frag
    #pragma target 3.0
    #include "UnityCG.cginc"
    

    struct a2v {
        half4 uv : TEXCOORD0 ;
        half4 vertex : POSITION ;
        UNITY_VERTEX_INPUT_INSTANCE_ID //Insert
    };

    struct v2f{
        half4 pos : SV_POSITION ;
        half4 uv : TEXCOORD0  ;
        UNITY_VERTEX_OUTPUT_STEREO //Insert
    };
    fixed4 _Color;
    fixed4 _EdgeColor;
    float _Width;
    
    v2f vert(a2v v)
    {
        v2f o;
        UNITY_SETUP_INSTANCE_ID(v); //Insert
        UNITY_INITIALIZE_OUTPUT(v2f, o); //Insert
        UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o); //Insert
        o.uv = v.uv;
        o.pos=UnityObjectToClipPos(v.vertex);
        return o;
    }


    fixed4 frag(v2f i) : COLOR
    {
        fixed4 col;
        float lx = step(_Width, i.uv.x);
        float ly = step(_Width, i.uv.y);
        float hx = step(i.uv.x, 1.0 - _Width);
        float hy = step(i.uv.y, 1.0 - _Width);
        col = lerp(_EdgeColor, _Color, lx*ly*hx*hy);
        return col;
    }
    ENDCG
    }
} 
    FallBack "Diffuse"
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值