GPU Temperature unusually high

The place to discuss all things Receiver.
Post Reply
Rabbit38
Posts: 4
Joined: Sun Jul 28, 2013 5:26 am

GPU Temperature unusually high

Post by Rabbit38 » Sun Jul 28, 2013 5:36 am

Hey,

I picked up Receiver in the Steam summer sale and was looking forward to playing it, but I've noticed that as I play, within 10-15 minutes my GPU's temperature will soar to 70 degrees C and higher, causing the fan to go crazy fast. This never happens with other games at all.

I've tried setting the graphical option to "Fastest" but that's done nothing at all, and neither has putting VSync on.

I have an Nvidia GeForce GTX 560 Ti.

Any help/input on this would be appreciated.

Thanks

EDIT: I just ran Overgrowth for the first time and the exact same thing is happening. Hopefully this will shed more light on the problem?

iLag
Posts: 24
Joined: Tue May 11, 2010 9:45 pm

Re: GPU Temperature unusually high

Post by iLag » Sun Jul 28, 2013 1:00 pm

From what I can tell the "Fastest" option does all of nothing.

The high temperatures are caused by the massive number of dynamic per-pixel lighting operations receiver uses. Unlike most games, you can see hallways lined with dozens of light bulbs. Each of these bulbs is a dynamic light which can be shot out, and the light rendered per-pixel. This is extremely taxing on GPUs, and was overheating my 9800 GT until I took two measures:

1) Install a high-performance aftermarket cooler. This helped tremendously, but costs money.
2) Download the Receiver source code and recompile with a newer version of Unity3D. This isn't hard, but will introduce lighting glitches and bugs.

I'll use this post to document how to get #2 Done and fix the bugs which come with it.
  1. Go to http://unity3d.com/ and download Unity. While you're at it, register on the site, since it's a requirement unfortunately.
  2. Install and startup Unity.
  3. Download Receiver's source code from the official git repository: https://github.com/David20321/7dfps . If you don't know how to do git properly, just click on the Download ZIP button on the right.
  4. Start Unity and open the Receiver project file.
  5. Once it finishes updating the source code for the new Unity version, you can click on File->Build Settings to build the game.
If you try to run the executable you just built right now, you'll have the severe lighting bugs caused by new versions of Unity limiting the number of per-pixel lights by default. The following patch file will fix the most important of those bugs, the flashlight and drone lights not being visible, by forcing those lights to always be rendered per-pixel. Of course, that's assuming I didn't screw up and omit one of the necessary changes.

If you don't know how to apply patch files or don't have the tools to, it's easy to do by hand. Read the file. Every line which starts with a " " is unmodified, lines starting with a "-" should be removed, and lines starting with a "+" should be added. The start of each file's changes is clearly marked, and the line numbers of each modified group of lines is at the top of each section. Once you locate the section within the file, add and remove the lines specified in the patch file, save, and once all changes are applied, rebuild. If you did everything right, the game will build. When ran, you will sill have some lighting bugs, but the worst of them will be fixed and your GPU will be running cooler as a result.

Code: Select all

Index: RobotScript.js
===================================================================
--- RobotScript.js	(revision 379)
+++ RobotScript.js	(working copy)
@@ -206,7 +206,8 @@
 
 function UpdateStationaryTurret() {
 	if(Vector3.Distance(GameObject.Find("Player").transform.position, transform.position) > kSleepDistance){
 		GetTurretLightObject().light.shadows = LightShadows.None;		
+		GetTurretLightObject().light.renderMode = LightRenderMode.ForceVertex;		
 		if(audiosource_motor.isPlaying){
 			audiosource_motor.Stop();
 		}
@@ -219,8 +220,10 @@
 		audiosource_motor.volume = 0.4 * PlayerPrefs.GetFloat("sound_volume", 1.0);
 		if(GetTurretLightObject().light.intensity > 0.0){
 			GetTurretLightObject().light.shadows = LightShadows.Hard;
+			GetTurretLightObject().light.renderMode = LightRenderMode.ForcePixel;	
 		} else {
 			GetTurretLightObject().light.shadows = LightShadows.None;
+			GetTurretLightObject().light.renderMode = LightRenderMode.ForceVertex;	
 		}
 	}
 	if(motor_alive){
@@ -391,6 +394,7 @@
 function UpdateDrone() {
 	if(Vector3.Distance(GameObject.Find("Player").transform.position, transform.position) > kSleepDistance){
 		GetDroneLightObject().light.shadows = LightShadows.None;
+		GetDroneLightObject().light.renderMode = LightRenderMode.ForceVertex;
 		if(motor_alive){
 			distance_sleep = true;
 			rigidbody.Sleep();
@@ -402,8 +406,11 @@
 	} else {
 		if(GetDroneLightObject().light.intensity > 0.0){
 			GetDroneLightObject().light.shadows = LightShadows.Hard;
+			GetDroneLightObject().light.renderMode = LightRenderMode.ForcePixel;
 		} else {
 			GetDroneLightObject().light.shadows = LightShadows.None;
+			GetDroneLightObject().light.renderMode = LightRenderMode.ForceVertex;
 		}
 		if(motor_alive && distance_sleep){
 			rigidbody.WakeUp();
Index: FlashlightScript.js
===================================================================
--- FlashlightScript.js	(revision 379)
+++ FlashlightScript.js	(working copy)
@@ -16,6 +16,10 @@
 }
 
 function Start () {
+	transform.FindChild("Spotlight").gameObject.GetComponent(Light).renderMode=LightRenderMode.ForcePixel;
+	transform.FindChild("Pointlight").gameObject.GetComponent(Light).renderMode=LightRenderMode.ForcePixel;
 	initial_pointlight_intensity = transform.FindChild("Pointlight").gameObject.GetComponent(Light).intensity;
 	initial_spotlight_intensity = transform.FindChild("Spotlight").gameObject.GetComponent(Light).intensity;
 	battery_life_remaining = Random.Range(max_battery_life*0.2, max_battery_life);

Rabbit38
Posts: 4
Joined: Sun Jul 28, 2013 5:26 am

Re: GPU Temperature unusually high

Post by Rabbit38 » Sun Jul 28, 2013 2:32 pm

iLag wrote: (very helpful instructions)
Thank you, thank you very much for this guide. It's an awful lot of trouble to go to, but I've done all this and it's working absolutely fine now. Temperature is very low and there's no graphical glitches that would make it unplayable for me at all.


I just have just two questions though:

Is this going to be 'fixed' in the future, ie. is there ever going to be an optimisation patch that'll erase this light rendering problem for me?

And why is it that I seem to be the only person that's had this problem? I checked the wiki and my card is listed as compatible with Overgrowth with no problems, yet it experiences the same overheating problem.


Again, thank you for the guide. Huge help and you've made it possible for me to finally enjoy this game and for that I am extremely grateful.

EDIT: It takes a while, but it does eventually reach about 70 Degrees C, so it's not all fixed but at least it isn't as bad as it was.

Post Reply