0

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

不知道当前选择了什么

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

选定的结构绿色,其余透明

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

提前致谢

4

2 回答 2

0

非常感谢杰瑞您的意见!我使用你的脚本来改变我已经使用的 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"
}

使用此脚本,我得到以下结果:

结构选择

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

我什至已经想到了一些额外的改编,添加黑色轮廓甚至可能会使这更好。

黑色轮廓

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

于 2015-12-29T13:21:53.353 回答
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"
}

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

于 2015-12-28T13:44:06.083 回答