# PBR Demystified – Part 1

There are a lot of PBR related writings out there which can make it very difficult to piece together the history and all of the different concepts into a complete PBR understanding. The goal of this short series is not to overload you with equations (those are easy enough to find) but to explain how they all come together for a PBR renderer.

You can find part 1 here.

# Custom Bokeh Pattern

At work I’ve been taking the proof of concept depth of field work I’ve done and iterating on it. One thing I wanted to do was have easier control over authoring and visualizing a bokeh pattern.

I decided to write a quick web page which will generate a bokeh pattern based on a couple of user supplied inputs. It will output a visualization of it and the hlsl code for it. If anyone is interested in using it the link is here:

http://www.trapzz.com/code/bokeh.html

# Copying Text to the Windows Clipboard

Recently I was having trouble reproducing a bug the perf team was running into, it had to do with a specific camera position in our workload. I decided the simplest and most time saving approach (for our purposes and for them) was to have them copy the camera data to a clipboard and email it to me – then I could reproduce the position exactly.

The msdn example code I found for copying data to the clipboard worked fine but it was a little overblown for the simple case I needed. I’ve boiled it down to just a few lines and I wanted to post it here in case anyone else wants to add this simple functionality to their application:

if ( ! OpenClipboard(hWnd) )
return;

EmptyClipboard();

char text[512] = "Your clipboard text (or data)";
size_t text_len = strlen(text);

// Allocate a global memory object for the text.
HGLOBAL hglbCopy = GlobalAlloc(GMEM_MOVEABLE, (text_len + 1) * sizeof(char));

// Lock the handle and copy the text to the buffer.
char *lptstrCopy = (char *) GlobalLock( hglbCopy );

memcpy(lptstrCopy, text, text_len * sizeof(char) );
lptstrCopy[text_len] = (char) 0;

GlobalUnlock(hglbCopy);

// Place the handle on the clipboard.
SetClipboardData(CF_TEXT, hglbCopy);

CloseClipboard( );

# GPU – Set Stable Power State

I’ve been doing some Vulkan recently and I needed to lock the GPU frequency. Nvidia has posted some code to do it – but strangely enough – it was just on a webpage not on github. So, I’ve added it to a repo and included a compiled executable. Just run it as a separate process and it’ll lock your GPU frequency for any workloads you’re profiling.

https://github.com/mcferront/set_stable_power_state

I use GPU-Z to check my GPU frequency:

https://www.techpowerup.com/gpuz/

# Simple Websocket Server in C++

Over the holiday break my interest in websockets was peaked when I watched my daughters play a javascript based multiplayer game http://slither.io/. I couldn’t find a simple example (or any actually) of how to write a C/C++ server which uses the websocket protocol.

After a some digging, reading the RFC, etc. I decided to write my own as a test – it’s a very simple test – but it works and establishes a connection. I posted it on github just in case someone else might be curious…it could save that person a couple of hours of header, sha, endian swapping headaches.

https://github.com/mcferront/simple_websocket

# Practical Edge Preserving Depth of Field

I wanted to take a stab at a depth of field technique – overall I’m happy with the results but I do have some areas I’d like to improve. This is a simple, straight forward technique which runs at ~.4ms on a 1080 Ti at 1080p resolution.