我们正在开发 Unity 中的解剖应用程序,用户可以在其中解剖人手模型。我们试图找到一个好的着色器/选择工具,当用户(从菜单中)选择当前不可见的对象(在手的背面或被其他结构覆盖的手内部)时,我们可以使用该工具。
现在我们正在使用透明着色器来可视化它,但是这个选项将来会在其他地方使用(您将能够淡化其他结构,以便更好地查看所选结构):
因此,如果有人知道如何解决这个问题(已经考虑过勾勒/使用 X 射线着色器,但仍需要首先找到可以用来测试的好的着色器),请告诉我!
提前致谢
我们正在开发 Unity 中的解剖应用程序,用户可以在其中解剖人手模型。我们试图找到一个好的着色器/选择工具,当用户(从菜单中)选择当前不可见的对象(在手的背面或被其他结构覆盖的手内部)时,我们可以使用该工具。
现在我们正在使用透明着色器来可视化它,但是这个选项将来会在其他地方使用(您将能够淡化其他结构,以便更好地查看所选结构):
因此,如果有人知道如何解决这个问题(已经考虑过勾勒/使用 X 射线着色器,但仍需要首先找到可以用来测试的好的着色器),请告诉我!
提前致谢
非常感谢杰瑞您的意见!我使用你的脚本来改变我已经使用的 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"
}
使用此脚本,我得到以下结果:
这是我们从一开始就想到的,非常感谢!
我什至已经想到了一些额外的改编,添加黑色轮廓甚至可能会使这更好。
现在的问题是将大纲应用于“覆盖部分”,但我想这应该是可能的!
使用我的着色器,我为类似的问题做过。
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"
}
基本上,这个着色器在每个着色器前面绘制其中一个通道。但请记住,并非所有人。您需要测试应用于隐藏部分是否会显示其形状,如果没有,请尝试在上面的对象上使用过度着色器。