This past week has been very productive. I have created and placed more objects in the scene for more interaction, such as a musical keyboard that plays short sound clip as player look at it and some animated butterflies. For static objects, I created an oriental lantern for both hanging lights and standing light by the bed, some outdoor stone light to give more illumination at night, and simple star system made of quads and emissive material that glow in the dark and disappear during day time. For the laying down experience, I noticed during play test that it was hard to interact with the pets, so they needed to be propped up higher. To make it look natural, I created a simple pet tower for them to perch on.
For mechanics, I added a look-at-user script to rotate pets. It is simple but powerful, since it enhances the presence of user.
I also looked more into optimizations earlier in the week, before I added more objects into the scene. I was hitting a wall for a while, since no matter what I did, I can only get around 25-30 fps. Once in a blue moon it would shoot to 45, but it wasn’t a consistent experience. Fortunately on Thursday night, two local OLP members organized a Unity Help session night, and they invited someone from Unity. There were about 5 of us OLPer showed up that night and we talked about our progress. The Unity lady showed up for an hour and answered as many questions we have for her. I brought the latest unity build on laptop, Gear VR & Samsung phone, but I forgot to bring USB cable to connect the phone to the laptop, stupid me.
When it was my turn to ask questions, the Unity lady sat with me and looked over Unity profiler to figure out why my frame rate couldn’t go over 30. The main thing she noticed was my day/night system, which use dynamic lighting. She changed a few lighting setting, like using culling mask on specific layer so Enlighten (Unity lighting system) does not have to compute light on everything, just the few objects within that layer. She also noticed that although I baked my lighting, I have Realtime Global Illumination activate on my baking setting, so she turned it off. The performance seemed a bit better on laptop, but it was hard to tell unless we tested it on the phone.
The following morning I applied the same changes on my work PC and deployed a build into the S7, and to my surprise, the fps went up to around 45-55. Then I proceed to clean up all the geometry in the scene, by changing their lighting setting (under mesh renderer) to use appropriate probes and shadows. Also, since I use raycasting to identify and interact with certain objects, I read up on optimization on that as well. The raycasting script I use has an option to exclude certain layer, so I put all non-interactable objects in that layer. I also removed any unnecessary colliders from these objects. Doing these changes brought my fps to above 55.
After I get to the good fps, I started adding more objects into the scene, one at a time, then rebake lighting and tested the change on phone every single time. It seemed like a lot of work, but it really help me keep track of the performance. To speed up the process, I did most of the testing using GearVR developer mode, so I don’t have to put and pull the phone off the GearVR hardware all the time. I only use the HMD hardware to test for user comfort.
During the Unity help session, I asked a few people to try my latest build. The feedback was pretty uniform, that they felt pretty comfortable in the experience, but they weren’t sure what to do at first. Based on this feedback, I felt the need to create some sort of tutorial for the demo. Due to time constraint, I decided to create a floating manual with text & picture instructions. I started this module last night using Unity geometry & UI elements, until around 3am in the morning. The module worked pretty well, but unfortunately during testing on the phone, I could only get around 35-45 fps.
Since PAX Dev & PAX West are happening this week, here are my to-do list:
– Submit a stable build for demo by Monday night (8/28)
– Optimize tutorial module to bring fps back to 55+ by Monday night
– Build freeze, no more new features unless it’s emergency
– Play test latest stable build at PAX Dev & PAX West to collect feedback
– Start the documentation process (website, updated proposal, screenshots, etc)
– If time permitted, polish existing features, like pet animation and object placements to ensure user comfort.
Have a great Labor day weekend! See you next week.