返回介绍

LightProbes.bakedProbes 基础探测器

发布于 2019-12-18 15:37:56 字数 4401 浏览 1124 评论 0 收藏 0

JavaScript => public var bakedProbes: SphericalHarmonicsL2[];
C# => public SphericalHarmonicsL2[] bakedProbes;

Description 描述

Coefficients of baked light probes.

基础灯光探测器的系数。

JavaScript:

#pragma strict
public var m_Ambient;
public var m_Lights;
 
// On start add the contribution of the ambient light and all lights
// assigned to the lights array to all baked probes.
function Start()
{
	var bakedProbes = LightmapSettings.lightProbes.bakedProbes;
	var probePositions = LightmapSettings.lightProbes.positions;
	var probeCount = LightmapSettings.lightProbes.count;
 
	// Clear all probes
	for (var i = 0; i < probeCount; i++)
		bakedProbes[i].Clear();
 
	// Add ambient light to all probes
	for (var i = 0; i < probeCount; i++)
		bakedProbes[i].AddAmbientLight(m_Ambient);
 
	// Add directional and point lights' contribution to all probes
	for (var l in m_Lights)
	{
		if (l.type == LightType.Directional)
		{
			for (var i = 0; i < probeCount; i++)
				bakedProbes[i].AddDirectionalLight(-l.transform.forward, l.color, l.intensity);
		}
		elseif (l.type == LightType.Point)
		{
			for (var i = 0; i < probeCount; i++)
				SHAddPointLight(probePositions[i], l.transform.position, l.range, l.color, l.intensity, bakedProbes[i]);
		}
	}
	LightmapSettings.lightProbes.bakedProbes = bakedProbes;
}
 
function SHAddPointLight(probePosition, position, range, color, intensity, sh)
{
	// From the point of view of an SH probe, point light looks no different than a directional light,
	// just attenuated and coming from the right direction.
	var probeToLight = position - probePosition;
	var attenuation = 1.0F / (1.0F + 25.0F * probeToLight.sqrMagnitude / (range * range));
	sh.AddDirectionalLight(probeToLight.normalized, color, intensity * attenuation);
}

C#:

using UnityEngine;
using UnityEngine.Rendering;
 
public class ExampleClass : MonoBehaviour
{
	public Color m_Ambient;
	public Light[] m_Lights;
 
	// On start add the contribution of the ambient light and all lights
	// assigned to the lights array to all baked probes.
	void Start()
	{
		SphericalHarmonicsL2[] bakedProbes = LightmapSettings.lightProbes.bakedProbes;
		Vector3[] probePositions = LightmapSettings.lightProbes.positions;
		int probeCount = LightmapSettings.lightProbes.count;
 
		// Clear all probes
		for (int i = 0; i < probeCount; i++)
			bakedProbes[i].Clear();
 
		// Add ambient light to all probes
		for (int i = 0; i < probeCount; i++)
			bakedProbes[i].AddAmbientLight(m_Ambient);
 
		// Add directional and point lights' contribution to all probes
		foreach (Light l in m_Lights)
		{
			if (l.type == LightType.Directional)
			{
				for (int i = 0; i < probeCount; i++)
					bakedProbes[i].AddDirectionalLight(-l.transform.forward, l.color, l.intensity);
			}
			else if (l.type == LightType.Point)
			{
				for (int i = 0; i < probeCount; i++)
					SHAddPointLight(probePositions[i], l.transform.position, l.range, l.color, l.intensity, ref bakedProbes[i]);
			}
		}
		LightmapSettings.lightProbes.bakedProbes = bakedProbes;
	}
 
	void SHAddPointLight(Vector3 probePosition, Vector3 position, float range, Color color, float intensity, ref SphericalHarmonicsL2 sh)
	{
		// From the point of view of an SH probe, point light looks no different than a directional light,
		// just attenuated and coming from the right direction.
		Vector3 probeToLight = position - probePosition;
		float attenuation = 1.0F / (1.0F + 25.0F * probeToLight.sqrMagnitude / (range * range));
		sh.AddDirectionalLight(probeToLight.normalized, color, intensity * attenuation);
	}
}

lightprobes

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文