Добавить контур в шейдер для обеих видимых / скрытых частей

Мы работаем над анатомическим приложением в Unity, где пользователь может анализировать модель человеческой руки. Мы используем этот скрипт для шейдера, чтобы выбрать структуру, которая будет видна через руку (чтобы вы могли видеть ее местоположение, даже когда она находится сзади / внутри руки)

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

Чтобы сделать это еще более понятным, мы хотим добавить черный контур на выбранной структуре. Это изображение должно дать лучшую идею: черный контур

Мы попытались откорректировать сценарий, однако черный контур не был применен к частям структуры позади других структур.

Наша цель: выбранная структура имеет черный контур как для видимых частей, так и для скрытых частей (поэтому скрытые части будут отображаться в любом случае, как этот шейдер окрашивает скрытые части), скрытые части будут иметь определенный цвет в зависимости от анатомического типа (как нерв = желтый), видимые части покажут свои диффузные / нормальные / зеркальные карты.

Этот скрипт шейдера работает для всего вышеперечисленного, кроме основной части. Кто-нибудь знает, как мы должны настроить скрипт? Другие предложения тоже приветствуются!

0 ответов

Другие вопросы по тегам