我正在尝试设置一个hdr材质在运行时的发射强度。一开始我试着:
self.material.SetFloat("_EmissiveIntensity", 1f);
但这似乎不起作用,可能是因为我使用的是通用渲染管道。然后我尝试了Unity论坛上的一大堆建议,比如this one和this one,还有这个。但是,这些建议似乎都不起作用。这是运行时期间编辑器中显示的内容但是我的代码应该把强度改为1。有什么建议吗?
zvms9eto1#
据我所知的_EmmisionIntensity并不是HDR颜色强度那样的se。HDR颜色基本上是一个矢量,它是
_EmmisionIntensity
yourColor * 2f ^ exposure
因此,您可以做的(不知道发射颜色的确切关键字)可能类似于
self.material.SetVector("_EmmissionColor", ((Vector4) yourColor) * Mathf.Exp(2f, exposure));
dly7yett2#
Unity对此有指导。简而言之,你不能在运行时更改该属性,而是使用一个不同的属性:https://docs.unity3d.com/Packages/com.unity.render-pipelines.high-definition@12.0/manual/adjusting-emissive-intensity-at-runtime.html对于高清晰度渲染管道(HDRP)非着色器图形着色器(如点亮、未点亮和贴花着色器)更改_EmissiveIntensity属性在运行时不会产生任何影响。这是因为_EmissiveIntensity不是独立属性。着色器仅使用_EmissiveIntensity序列化UI中的属性,并将最终结果存储在_EmissiveColor属性中。要编辑发光材质的强度,设置_EmissiveColor并将其乘以所需的强度。
2条答案
按热度按时间zvms9eto1#
据我所知的
_EmmisionIntensity
并不是HDR颜色强度那样的se。HDR颜色基本上是一个矢量,它是
因此,您可以做的(不知道发射颜色的确切关键字)可能类似于
dly7yett2#
Unity对此有指导。简而言之,你不能在运行时更改该属性,而是使用一个不同的属性:https://docs.unity3d.com/Packages/com.unity.render-pipelines.high-definition@12.0/manual/adjusting-emissive-intensity-at-runtime.html
对于高清晰度渲染管道(HDRP)非着色器图形着色器(如点亮、未点亮和贴花着色器)更改_EmissiveIntensity属性在运行时不会产生任何影响。这是因为_EmissiveIntensity不是独立属性。着色器仅使用_EmissiveIntensity序列化UI中的属性,并将最终结果存储在_EmissiveColor属性中。要编辑发光材质的强度,设置_EmissiveColor并将其乘以所需的强度。