- Home /
Reduce water's reflection camera max clipping plane
Hi! So my issue is simple, the reflection camera of the water4 example displays elements that are behind my main camera's clipping plane, this wastes a lot of resources!
Any help would be greatly appreciated!
Hey I know this is a very old question but did you find a solution to this in the end? I'm having the same problem and have been rattling my brain trying to fix it.
I'd love to have a solution to this too. Unfortunately I wouldn't be able to use Joe's answer below because some of the objects to clip out are terrains, which are on the Terrain layer, and need to continue to stay on that layer in a large RTS.
Answer by JoeHarry · May 22, 2014 at 08:25 AM
Even though this is a very old question I'll post my solution in case anyone in the future has the same problem...
Rather than trying to change the clipping plane of the water reflection (which seems impossible) I created a new layer called Reflection Layer and set the water plane to reflect this layer only. Then game objects can be added or removed from the reflection layer depending on how close the player is. Here is a quick script I wrote for that...
using UnityEngine;
using System.Collections;
public class ChangeLayer : MonoBehaviour {
public Transform character; //add the player game object in inspector
private Transform cachedTransform;
private float dist;
// Use this for initialization
void Start ()
{
cachedTransform = transform; //cache the player position
dist = Vector3.Distance(character.position, cachedTransform.position); //calculate distance between object and player
StartCoroutine(CheckDistance());
}
IEnumerator CheckDistance()
{
while(true)
{
dist = Vector3.Distance(character.position, cachedTransform.position); //calculate distance between object and player
if(dist < 60) //If player is close enough to game object
gameObject.layer = LayerMask.NameToLayer("Reflection Layer"); //Add to reflection layer
else //If not close
gameObject.layer = LayerMask.NameToLayer("Default"); //Add to default layer
yield return new WaitForSeconds(0.3f);
}
}
}
The script has to be added to every game object that you want to be reflected... so if you have hundreds of game objects there may be a better way but this works perfectly for me.
Cheers, Joe
Your answer
Follow this Question
Related Questions
Why does setting the Camera Clip Plane make my game run slow? 3 Answers
Corner of third person camera clipping through objects 0 Answers
Preventing camera clipping 2 Answers
Water effect on camera lens 2 Answers
Minimum Near Clip Plane for the camera 2 Answers