其他结构背后的选择

时间:2015-12-28 13:19:45

标签: unity3d selection outlining

我们正在Unity中开发解剖学应用程序,用户可以在其中剖析人手模型。 我们正在尝试找到一个很好的着色器/选择工具,当用户选择(从菜单中)当前不可见的对象(在手的背面或在其他结构覆盖的手内)时,我们可以使用它。

no idea whats currently selected

现在我们正在使用透明着色器来显示这个,但是此选项将在未来的其他地方使用(您将能够淡化其他结构,以便您可以更好地查看所选结构):

selected structure green, rest transparant

因此,如果有人想知道如何解决这个问题(已经考虑过概述/使用X射线着色器,但仍需要先找到我们可以用来测试的好着色器),请告诉我!

提前致谢

2 个答案:

答案 0 :(得分:0)

使用我的着色器,我做了类似的问题。

Shader "NameItAsYouWish" {
Properties {
_Color ("Main Color", Color) = (1,1,1,1)
_ColorVisible04 ("Color Visible", Color) = (1,0,0,0.3)
_MainTex ("Base (RGB)", 2D) = "white" {}
}
SubShader {
Tags { "RenderType"="Opaque" }

    Pass {

        Name "BASE"
        Cull Off Lighting Off ZWrite Off ZTest Greater

        Blend SrcAlpha OneMinusSrcAlpha
        SetTexture [_MainTex] {
            constantColor [_ColorVisible04]
            Combine constant
        } 
    }
    Pass {
        Material{
            Diffuse[_Color]
            Ambient [_Color]

        }
        Name "DIFFUSE"
        Cull Off Lighting On ZWrite On ZTest Less 
        SetTexture [_MainTex] {
            constantColor [_Color]
            Combine texture * primary DOUBLE
            } 
    }

 }


Fallback "VertexLit"
}

基本上这个着色器,在每个着色器前面绘制其中一个通道。但请记住,并非所有这些。您需要测试应用于隐藏部分是否会显示其形状,如果不是在上面的对象上尝试过度着色器。

答案 1 :(得分:0)

非常感谢Jerry的投入!我使用你的脚本来改变我已经使用过的Marmoset着色器:

// Marmoset Skyshop
// Copyright 2013 Marmoset LLC
// http://marmoset.co

Shader "Marmoset/Bumped Specular Xray" {
Properties {
    _Color   ("Diffuse Color", Color) = (1,1,1,1)
    _ColorVisible04("Color Visible", Color) = (1,0,0,0.3)
    _SpecColor ("Specular Color", Color) = (1,1,1,1)
    _SpecInt ("Specular Intensity", Float) = 1.0
    _Shininess ("Specular Sharpness", Range(2.0,8.0)) = 4.0
    _Fresnel ("Fresnel Strength", Range(0.0,1.0)) = 0.0
    _MainTex ("Diffuse(RGB) Alpha(A)", 2D) = "white" {}
    _SpecTex ("Specular(RGB) Gloss(A)", 2D) = "white" {}
    _BumpMap ("Normalmap", 2D)  = "bump" {}


    //slots for custom lighting cubemaps
    //_DiffCubeIBL ("Custom Diffuse Cube", Cube) = "black" {}

}

SubShader {
    Tags {
        "Queue"="Geometry"
        "RenderType"="Opaque"
    }
    LOD 400
    //diffuse LOD 200
    //diffuse-spec LOD 250
    //bumped-diffuse, spec 350
    //bumped-spec 400
    Pass{

    Name "BASE"
    Cull Off Lighting Off ZWrite Off ZTest Greater

    Blend SrcAlpha OneMinusSrcAlpha
    SetTexture[_MainTex]{
    constantColor[_ColorVisible04]
    Combine constant
}
    }
    //mac stuff
    CGPROGRAM
    #ifdef SHADER_API_OPENGL
        #pragma glsl
    #endif

    #pragma target 3.0
    #pragma exclude_renderers gles gles3 metal d3d11_9x flash
    #pragma surface MarmosetSurf MarmosetDirect vertex:MarmosetVert fullforwardshadows 

    #pragma multi_compile MARMO_BOX_PROJECTION_OFF MARMO_BOX_PROJECTION_ON
    #if MARMO_BOX_PROJECTION_ON 
        #define MARMO_BOX_PROJECTION
    #endif


    #pragma multi_compile MARMO_SKY_BLEND_OFF MARMO_SKY_BLEND_ON

    #if MARMO_SKY_BLEND_ON
        #define MARMO_SKY_BLEND
    #endif

    #define MARMO_HQ
    #define MARMO_SKY_ROTATION
    #define MARMO_DIFFUSE_IBL
    #define MARMO_SPECULAR_IBL
    #define MARMO_DIFFUSE_DIRECT
    #define MARMO_SPECULAR_DIRECT
    #define MARMO_NORMALMAP
    #define MARMO_MIP_GLOSS

    //#define MARMO_GLOW
    //#define MARMO_PREMULT_ALPHA
    //#define MARMO_OCCLUSION
    //#define MARMO_VERTEX_OCCLUSION
    //#define MARMO_VERTEX_COLOR
    //#define MARMO_SPECULAR_FILTER

    #include "MarmosetInput.cginc"
    #include "MarmosetCore.cginc"
    #include "MarmosetDirect.cginc"
    #include "MarmosetSurf.cginc"

    ENDCG
}

FallBack "Marmoset/Specular IBL"
}

使用此脚本我得到了这个结果:

structure selection

这是我们从一开始就想到的,所以非常感谢!

我甚至想过一些额外的适应性,添加黑色轮廓甚至可以让这更好。

black outlining

现在的问题是将概述应用于“覆盖部分”,但我想它应该是可能的!