Dev Log #01

Welcome back!

It’s been a busy month for Poly Haven and there’s a lot to talk about 🙂

GPU go brrr

Thanks to your donations on Patreon, a new RTX 3090 joins the family!

We’ve decided to make 16k the new standard resolution for texture maps going forward, and to achieve this we need some serious hardware.

16k textures may sound overkill for now, but with hardware capabilities constantly improving year by year and new techniques like direct storage on the horizon, artists’ and users’ expectations for texture quality are only going to increase. It seems pointless producing assets for today’s standard, while game developers and film studios are working on content that will only be seen publicly a few years from now, when expectations of quality are higher than today.

The main requirement is a massive amount of memory, hence the 24GB 3090 instead of the vastly cheaper 10GB 3080 or any AMD card. 16k is the target for now, but we do also plan to explore going even higher.

GPU memory is not the only consideration though. Our photoscanned surfaces come from around 200 high resolution photos, producing meshes over 100 million triangles – so it was also necessary to get a set of 128GB of RAM for Rico’s machine, as well as a few more TB of internal storage.

Before making this massive purchase, of course we spent a lot of time researching options and testing our current hardware’s limits. One of the options we explored was cloud-based hardware rental from services like Renderro and BeBop, where you rent a machine on the other side of the planet (in our case) at some hourly rate for temporary use. The main advantage of this method is a low up-front cost, but in the long term with regular use it works out quite expensive. Our conclusion was that (for now at least) it’s more effective to invest our own hardware, which is more capable than the hardware available in the cloud anyway.

Cross-polarized ring flash

Traditionally, photogrammetry (for both texture scans and model scans) has to be done outside on an overcast day to get enough light for reasonable shutter speeds and to avoid hard shadows being baked into your textures. A controlled environment with a tripod is another option, though since you’re shooting hundreds of images, a long exposure time really should be avoided if possible.

Another option is to bring your own light!

We’ve bought a ring flash that will allow us to shoot texture scans in a wider variety of lighting conditions.

The main problem when shooting texture scans with a ring flash is that for any surface that’s remotely reflective (basically everything), you end up with some massive bright reflections in the center of the frame.

To remove these, we’ll be using a technique called cross-polarized photography – basically you put a polarizing filter on both the light (in our case using a custom 3d printed mount) and the camera, oriented perpendicularly to each other – which almost completely eliminates all reflections.

Here’s an old test I did to show the effect:

We haven’t shot anything with this flash yet (the polarizing filter for the light just arrived this week), but from early tests it looks like this method is pretty ideal.

Blends for every texture

On the new Poly Haven site, we’ll be providing blend files for every texture in order to make it easier to download the whole material in one go, rather than dealing with individual image files and having to set them up in Blender yourself.

James has been working on this for all our 200+ existing textures, as well as writing a script to normalize all displacement/height maps in order to allow the use of JPG displacement maps in some cases without too many noticeable artefacts.

80TB per month

As I mentioned last month, one of the challenges of hosting our assets is the large amount of internet bandwidth needed to serve them to users.

Our experience tells us that a single web server, even combined with Cloudflare caching, is not enough for this kind of scale. Cloud services like AWS/Google/B2 are always what people recommend, but in our case they would be unreasonably unaffordable and use up our entire budget.

Instead, we’re going with a simple load balanced network of cheap dedicated servers. This makes it very easy to scale the system as demand increases.

At the moment, there are two simple $8/m servers in the pool, using Cloudflare for both the load balancer itself ($5/m) and as a caching layer ($20/m) which handles around 90% of the total traffic at the moment.

This total of ~$40 per month to serve 80TB of traffic is significantly more cost effective than hosting the whole thing on even the cheapest cloud storage service (B2, ~$800/m estimate)

This system is already in use for HDRI Haven, though some more work under the hood is needed before we can use it for models and textures too.

AdSense suspended

Out of the blue last week I received this email from Google AdSense:

The result of this “limitation” is essentially zero ad revenue since last week.

Obviously to my knowledge we haven’t been clicking our own ads or generating invalid traffic, nor do I see any increase in traffic or ad impressions, so I really have no idea what caused this.

I assume this is either some kind of false detection, or someone maliciously trying to hurt us. Either way, Uncle Google doesn’t like us and there’s literally nothing we can do about it.

The email later goes on to say: “While this ad serving limit typically impacts publishers for less than 30 days, it may take longer in some cases.”

AdSense currently forms around a third of our total income, but we’re not in any immediate financial peril. We have a fair amount of savings from past years and personal funds we can inject if needed. Patreon donations continue strong, and our new corporate sponsorship tiers have provided some additional relief.

To solve this issue long term (I’m not going to sit and wait for Google to realize we’re OK), we’ll be implementing our own ad server using Revive, an open source tool.

For the time being, from a user point of view this means less ads in total (one per page), no more animated ads, no more personalized tracking from Google AdSense, and ads that are now specifically relevant to 3D rather than whatever unrelated crap Google feels like showing you.

The first ads you will see from this new system will be for Rob’s environment course, as he will personally be buying a lot of the initial ad space in order to help us cover costs in the short term while we figure out the system and build relationships with other advertisers.

This will likely start sometime next week on Texture Haven first, and then roll out to the other Havens once things appear stable.

If Google happens to re-approve us in the next few days, then these systems may work together, however if not then we will be removing AdSense entirely.

Regardless of this issue, moving away from Google AdSense is something we’ve been wanting to do at some point anyway.

Latest texture scans

Rob, Dimitri and Rico have been on a roll for a while, producing excellent new texture scans, some of which are already online:

Upcoming models

James has also been hard at work on some more props for the pawn shop scene:

Upcoming HDRIs

Here’s a sneak peek of next month’s HDRIs from Sergej and Andreas 🙂

That’s all folks! See you next month 🙂

As usual if you have an questions or just want to chat, feel free to leave a comment below or join us on Discord. We’re always keen for feedback and ideas.

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.