Unity Render Shadow Only 1 Main Camera 通过使用 OnPreRender(), OnPostRender()
Unity Render Shadow Only 1 Main Camera by using OnPreRender(), OnPostRender()
我有4个摄像头。 1个主摄像头和3个副摄像头。
我不想在 3 个子相机中渲染阴影,所以我将下面的代码附加到 3 个子相机。
// https://answers.unity.com/questions/1219726/make-shadows-disappear.html
private void OnPreRender()
{
shadowDisatance = QualitySettings.shadowDistance;
QualitySettings.shadowDistance = 0;
}
private void OnPostRender()
{
QualitySettings.shadowDistance = shadowDisatance;
}
它工作正常,但我只是不想将此脚本附加到 3 个子相机。相反,我想制作一个脚本并将其仅附加到 1 个主摄像头。
当然,下面这段代码的目的是让Main camera只渲染阴影。
private void OnPreRender()
{
QualitySettings.shadowDistance = 40;
}
private void OnPostRender()
{
QualitySettings.shadowDistance = 0;
}
但它使Main Camera不渲染阴影。它只是使每个 shadowDistance 为 0.
请帮忙。
我真的不明白为什么,但如果你不想在子摄像头上附加任何东西,你可以改为使用 Camera.onPreRender
and Camera.onPostRender
并让它为除主摄像头之外的每个摄像头做这件事。
如前所述,我宁愿更改 QualitySettings.shadows
而不是 shadowDistance
,但这显然取决于您。
像这样
[RequireComponent(typeof(Camera))]
public class DisableSubCamShadows : MonoBehaviour
{
// either drag this in via the inspector
public Camera mainCamera;
private ShadowQuality _originalShadowSettings
// or get it on runtime
private void Awake()
{
// mainCamera will be the one attached to this object
mainCamera = GetComponent<Camera>();
// store original shadow settings
_originalShadowSettings = QualitySettings.shadows;
}
private void OnEnable()
{
// register the callbacks when enabling object
Camera.onPreRender += MyPreRender;
Camera.onPostRender += MyPostRender;
}
private void OnDisable()
{
// remove the callbacks when disabling object
Camera.onPreRender -= MyPreRender;
Camera.onPostRender -= MyPostRender;
}
// callback before ANY camera starts rendering
private void MyPreRender(Camera cam)
{
// if mainCamera set to originalShadowSettings
// could also simply return but just to be sure
//
// for other camera disable shadows
QualitySettings.shadows = cam == mainCamera ? originalShadowSettings : ShadowQuality.Disable;
}
// callback after ANY camera finishes rendering
private void MyPostRenderer(Camera cam)
{
// restore shadow settings
QualitySettings.shadows = originalShadowSettings;
}
}
将其附加到 MainCamera
我有4个摄像头。 1个主摄像头和3个副摄像头。
我不想在 3 个子相机中渲染阴影,所以我将下面的代码附加到 3 个子相机。
// https://answers.unity.com/questions/1219726/make-shadows-disappear.html
private void OnPreRender()
{
shadowDisatance = QualitySettings.shadowDistance;
QualitySettings.shadowDistance = 0;
}
private void OnPostRender()
{
QualitySettings.shadowDistance = shadowDisatance;
}
它工作正常,但我只是不想将此脚本附加到 3 个子相机。相反,我想制作一个脚本并将其仅附加到 1 个主摄像头。
当然,下面这段代码的目的是让Main camera只渲染阴影。
private void OnPreRender()
{
QualitySettings.shadowDistance = 40;
}
private void OnPostRender()
{
QualitySettings.shadowDistance = 0;
}
但它使Main Camera不渲染阴影。它只是使每个 shadowDistance 为 0.
请帮忙。
我真的不明白为什么,但如果你不想在子摄像头上附加任何东西,你可以改为使用 Camera.onPreRender
and Camera.onPostRender
并让它为除主摄像头之外的每个摄像头做这件事。
如前所述,我宁愿更改 QualitySettings.shadows
而不是 shadowDistance
,但这显然取决于您。
像这样
[RequireComponent(typeof(Camera))]
public class DisableSubCamShadows : MonoBehaviour
{
// either drag this in via the inspector
public Camera mainCamera;
private ShadowQuality _originalShadowSettings
// or get it on runtime
private void Awake()
{
// mainCamera will be the one attached to this object
mainCamera = GetComponent<Camera>();
// store original shadow settings
_originalShadowSettings = QualitySettings.shadows;
}
private void OnEnable()
{
// register the callbacks when enabling object
Camera.onPreRender += MyPreRender;
Camera.onPostRender += MyPostRender;
}
private void OnDisable()
{
// remove the callbacks when disabling object
Camera.onPreRender -= MyPreRender;
Camera.onPostRender -= MyPostRender;
}
// callback before ANY camera starts rendering
private void MyPreRender(Camera cam)
{
// if mainCamera set to originalShadowSettings
// could also simply return but just to be sure
//
// for other camera disable shadows
QualitySettings.shadows = cam == mainCamera ? originalShadowSettings : ShadowQuality.Disable;
}
// callback after ANY camera finishes rendering
private void MyPostRenderer(Camera cam)
{
// restore shadow settings
QualitySettings.shadows = originalShadowSettings;
}
}
将其附加到 MainCamera