私たちは、ユーザーが人間の手のモデルを解剖できる、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"
}
これをさらに明確にするために、選択した構造に黒い輪郭を追加します。この画像はより良いアイデアを与えるはずです: 黒い輪郭
スクリプトを調整しようとしましたが、他の構造の背後にある構造の部分に黒いアウトラインが適用されていません。
私たちの目標: 選択された構造には、可視部分と非表示部分の両方のアウトラインが黒で表示されます (つまり、このシェーダーが非表示部分に色を付けるように、非表示部分が表示されます)。非表示部分は、解剖学的タイプに基づいた特定の色になります (神経 = 黄色のように)、可視部分には拡散/法線/鏡面反射マップが表示されます。
このシェーダー スクリプトは、上に挙げたものすべてに機能しますが、アウトライン部分には機能します。スクリプトをどのように調整する必要があるか知っている人はいますか? 他の提案も大歓迎です!