I have a split screen ship game where each player has there own camera. I know how to change the render settings through script. However, I want to implement a fog for each camera that is independent fromt he scene render settings. For example, if one boat goes underwater that boat's camera displays a thick underwater fog, while the boat above the water still has the thin above water fog. Is this possible? What is the best way to implement?
Thanks in advance.
float previousFogDensity;
void OnPreRender()
{
previousFogDensity = RenderSettings.fogDensity;
if( /* is this camera below water */ )
{
RenderSettings.fogDensity = /* whatevever your underwater value is */;
}
}
void OnPostRender()
{
RenderSettings.fogDensity = previousFogDensity;
}
This script assumes that your normal fog density is what you want for above water fog to be.
How you determine whether or not your camera is above water is very dependent on what your game does. The easiest thing to do is to probably have a script hookup to your player object (or equivalent) and just query that to see if it is or isn't above water. Or if you set it up that your water is always below zero on the Y axis you can just check the camera's position.
One way is to use OnPreRender / OnPostRender for the cameras, like this.
I get thick fog underwater, but no fog above water. Scene render settings are set to .003 fog. My foglayer script sets the scene render setting to .1 density when testing. However, even when the foglayer isn't on the fog density stays at .1. This is the script of my uwfoglayer:
If the uwfoglayer is enabled the camera should revet back to scene render settings right? Any suggestions on how to get the fog to work above the water? I tried adding a second foglayer to the camera that sets the fogDensity to .003 when above water. But the fog does not appear at all.
`private var revertFogState = false;
function OnPreRender () {
revertFogState = RenderSettings.fog;
RenderSettings.fog = enabled;
}
function OnPostRender () {
RenderSettings.fog = revertFogState;
RenderSettings.fogDensity = .1;
}
@script AddComponentMenu ("Rendering/Fog Layer")
@script RequireComponent (Camera)
`
I tried this. But it has a fatal error and freezes unity everytime I try to run th app.
private var previousFogDensity;
function OnPreRender(){
if (transform.Find("boat_model/uboat/parascope/parascopeview").position.y < 0){
previousFogDensity = RenderSettings.fogDensity;
RenderSettings.fogDensity = .1;
}
}
function OnPostRender(){
RenderSettings.fogDensity = previousFogDensity;
}
@script AddComponentMenu ("Rendering/Fog Layer")
@script RequireComponent (Camera)