unity3d 尝试在运行时编辑HDRP着色器发射强度

7eumitmz  于 2023-02-09  发布在  其他
关注(0)|答案(2)|浏览(231)

我正在尝试设置一个hdr材质在运行时的发射强度。
一开始我试着:

self.material.SetFloat("_EmissiveIntensity", 1f);

但这似乎不起作用,可能是因为我使用的是通用渲染管道。
然后我尝试了Unity论坛上的一大堆建议,比如this onethis one,还有这个。但是,这些建议似乎都不起作用。
这是运行时

期间编辑器中显示的内容
但是我的代码应该把强度改为1。
有什么建议吗?

zvms9eto

zvms9eto1#

据我所知的_EmmisionIntensity并不是HDR颜色强度那样的se。
HDR颜色基本上是一个矢量,它是

yourColor * 2f ^ exposure

因此,您可以做的(不知道发射颜色的确切关键字)可能类似于

self.material.SetVector("_EmmissionColor", ((Vector4) yourColor) * Mathf.Exp(2f, exposure));
dly7yett

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并将其乘以所需的强度。

相关问题