【发布时间】:2018-04-18 01:48:39
【问题描述】:
在 Unity 中,如何阻止我的 3d 文本在黑暗中“发光”?
例如,我正在使用下面的着色器代码,但文本比其他内容更亮/自发光。更改为“Lighting On”会消除发光,但也会消除材质颜色,并变为黑色。
如何解决这个问题?非常感谢!
Shader "GUI/3D Text Shader - Cull Back" {
Properties {
_MainTex ("Font Texture", 2D) = "white" {}
_Color ("Text Color", Color) = (1,1,1,1)
}
SubShader {
Tags { "Queue"="Transparent" "IgnoreProjector"="True" "RenderType"="Transparent" }
Lighting Off Cull Back ZWrite Off Fog { Mode Off }
Blend SrcAlpha OneMinusSrcAlpha
Pass {
Color [_Color]
SetTexture [_MainTex] {
combine primary, texture * primary
}
}
}
【问题讨论】:
-
不是一个确切的答案,但如果您将其设计为片段着色器而不是使用内置方向docs.unity3d.com/Manual/SL-VertexFragmentShaderExamples.html,您将获得更多控制权
-
也许我看错了,但是不能从材料的检查员那里调整
_Color属性的亮度吗? -
这确实会调整RGB的亮度,但不会调整环境中的发光亮度。以颜色为 rgb(255,0,0) 的文本为例,它是红色;如果我的 3d 场景中绝对没有光源,那么该文本将因此不会显示(因为它是漆黑的)。这适用于任何其他 3d 网格,但另一方面,字体现在将有效地“在黑暗中发光”。 (颜色越不亮,发光就越少,但问题仍然存在。)
-
我怀疑emissive glow 只是材质的unlit 颜色与黑暗/可变光照场景形成对比?光照着色器可以解决这样的问题,但是 Unity 的
TextMesh组件似乎不会生成网格法线,因此着色器的光照计算会损坏(如果完全编译的话)。它解释了为什么Lighting On输出黑色。如果无法访问TextMesh内部结构并受限于固定功能着色器的限制,自定义着色器可能是您唯一的选择。如果你愿意,我可以发一个来测试一下? -
没错,“发光”基本上就是屏幕上显示的那种颜色的完美 RGB,就好像它不受环境或 3D 渲染的影响,因此看起来很闪亮。是的,很高兴测试您可能拥有的任何着色器!