WinDAS White Point Balance guide for Sony Trinitron CRTs

just realized something - you don't have to do this psychophysically. You can use the colorimeter to integrate the gratings.

Protocol would look something like this:

First, generate a grating, consisting of alternating darker and lighter stripes. Call the RGB level of the dark stripe "Low value", and the level of the lighter stripe "High value". Make sure your colorimeter can reliably read the luminance of this low value.

Measure the luminance of the Low value and High value. Take the average of these numbers and write it down.

Without moving colorimeter from its position on the screen, display the grating, measure the luminance of the grating (which should integrate the luminance info across the grating stripes). Compare the reading to that of the number you wrote down.

If it's a perfect match, then we're in business. Will report back.

Ok made a grating, whose Low value was 0.7 nits, and whose High value was 2.2 nits. Mean of these = 1.45 nits.

Measuring the grating itself: 1.45 nits

Made another grating with the dark stripe having video level 0, and the lighter stripe measurnig at 0.28 nits

When I measured the grating itself, it measured at 0.14, implying a black level of exactly 0

I'll ask Zoyd if there's a way to access more more readoff precision - i think the real time display rounds to 2 decimal places.

use with love2d. (download, unzip, save the pastebin as main.lua in the love2d directory, open command prompt there, and "love .")

I tried it at different resolutions: from 2480x1860 where the grating is indistinguishable from a solid color to 1024x768, where each scanline is visible.

194 is the closest to a 255/0 grating for every resolution. (earlier i said 194 is close to 254/0, but actually it's closer to 255/0).

this means that the phosphor's response is actually very linear. by linear I mean, if you throw at it twice as many electrons, it emits twice as many photons.

however my dtp94 tells me that 193 is the color that is closest to half of 255's luminance. yet in my program, 194 is clearly much close to a 255/0 grating than both 193 and 195. so what's going on? well i measured the luminance of a 255/0 grating and actually it's slightly more than half of 255's luminance (~1% more), and closer to 194's luminance. so at least that confirms that my eyes and my program work

anyway so now the question is why is 255/0 1% brighter than half of 255's luminance?
4 possible factors. (not mutually exclusive)
0. well I only measured at the center of the screen...... whereas the program is shown over a much larger area.
1. dtp94 not linear. i don't feel this is likely. spacediver, if you could reproduce my observation that 255/0 is more than half as bright as 255, could you check with something better than a dtp94?
2. crt electronics not perfect. perhaps the 255 lines in the grating get more electrons than the lines in the solid 255?
3. phosphors not linear. if (2) isn't a significant factor, the grating should have exactly half as many electrons as the solid color.

i'm going to go test with some darker colors tomorrow. i expect more linearity when there are fewer electrons and photons.

anyway assuming the above isn't an issue (and it probably isn't), this is how I would use this method:

suppose I can adjust the LUT values for every level
suppose my instrument can only read with precision of 0.1 nits.
suppose I want 3 to be 0.25 nits.
I would temporarily adjust the LUT of 7 so that my instrument measures 4 nits
then i'd make a 7/0 grating and compare that to solid 6.
I'd temporarily adjust the LUT of 6 until it matches the grating. so 6 should be 2 nits.
repeat until I reach 3.

but anyway, since even the dtp94 has around 0.01nits of precision, what content is there that would benefit from this approach?

I'll ask Zoyd if there's a way to access more more readoff precision - i think the real time display rounds to 2 decimal places.

Damn, looks like I didn't take precision into account..

Will go through your last two posts flod and respond soon.

use with love2d. (download, unzip, save the pastebin as main.lua in the love2d directory, open command prompt there, and "love .")

I followed your instructions (I'm using the 32 bit versino of love2d), copied the pastebin as main.lua into \love directory (there was no love2d directory). opened up a cmd window and navigated to the \love directory, typed love, and some weird cartoon appeared with a bubble saying "no game!"

194 is the closest to a 255/0 grating for every resolution. (earlier i said 194 is close to 254/0, but actually it's closer to 255/0).

this means that the phosphor's response is actually very linear. by linear I mean, if you throw at it twice as many electrons, it emits twice as many photons.

Not sure how you inferred the linearity of the phosphor response from this data. Can you elaborate?

The luminance output of an aluminized phosphor screen is indeed very linear, as a function of beam current, up until very high beam currents where the phosphor output saturates.

However the beam current itself is a nonlinear function of input voltage (video signal).

Finally, keep in mind that doubling luminance doesn't double the intensity of perceived luminance, as our visual response to changes in luminance is non linear.

however my dtp94 tells me that 193 is the color that is closest to half of 255's luminance. yet in my program, 194 is clearly much close to a 255/0 grating than both 193 and 195. so what's going on? well i measured the luminance of a 255/0 grating and actually it's slightly more than half of 255's luminance (~1% more), and closer to 194's luminance. so at least that confirms that my eyes and my program work

You can't just halve the luminance of 255 to get the result of a 255/0 grating, unless your black level is absolute 0. Does this answer your question?

anyway assuming the above isn't an issue (and it probably isn't), this is how I would use this method:

suppose I can adjust the LUT values for every level
suppose my instrument can only read with precision of 0.1 nits.
suppose I want 3 to be 0.25 nits.
I would temporarily adjust the LUT of 7 so that my instrument measures 4 nits
then i'd make a 7/0 grating and compare that to solid 6.
I'd temporarily adjust the LUT of 6 until it matches the grating. so 6 should be 2 nits.
repeat until I reach 3.

but anyway, since even the dtp94 has around 0.01nits of precision, what content is there that would benefit from this approach?

If I wanted 3 to be 0.25 nits, this is the approach I'd use, off the top of my head.

(thinking out aloud here, not being pedantic)

Suppose instrument has precision of 0.1 nits.

Adjust a higher level, say 10, until it reads 2 nits (in reality, anywhere from 1.95 to 2.05 nits)

We want to create a grating whose average luminance is (0.25 + 2)/2 = 1.125 nits, and therefore matches a test patch of 1.125 nits. But we'd need to create that test patch and we'd be limited in our precision, when creating that test patch, to between 1.05 and 1.15.

So say we create that test patch, with level 5, until our instrument reads 1.1. We then create a grating comprised of level 3 and 10, and adjust level 3 until there's a perfect visual match.

Given the formula:

0.5 * (Luminance_darkerstripe + Luminance_lighterstripe) = Luminance_Test patch.

and given that:

Lum_lighter = 1.95 to 2.05
Lum_Test = 1.05 to 1.15

All we can say is that Lum_dark = anywhere from:

(2 * 1.05) - 2.05 to (2 * 1.15) - 1.95

= 0.05 to 0.35 nits, which is like saying 0.2 +- 0.15 nits. Looks like we get even worse precision because our method relies on multiplying individual quantities, each of which have their own precision.

So yea, you're right - precision fucks us.

Can you confirm whether what I've said makes sense?

you need to do
"love ."
note the period. that tells it to search for main.lua in the current directory.

my black level is <= 0.01 nits. roughly 0.003 nits actually. (estimated by the following: my black level is about as black as my iphone 5's black level with backlight all the way down. with the backlight at minimum, my iphone 5's white level is ~3 nits. from reviews of the iphone 5, i know the contrast ratio is ~1000, and from what I know, contrast ratio shouldnt change too much with backlight intensity). so the fact that I have a nonzero black level doesn't explain it. you may be wondering about whether the black level of the blacks in the grating matter. it doesnt because I see the same results with the resolution is so high that the grating appears as a solid shade.

i understand your approach... it makes sense but i think my cascading way is better, since the instrument error is halved at every step. though with my method at every step there's human error. but that's not as big of a problem because human precision in luminance matching is like +-2% of the luminance, whereas the instrument's precision remains 0.01 nits or something with dark colors.

do you know of any way to adjust the LUT on the fly?

by the way, the 'x' button in my program is enormously helpful (it swaps the grating with the solid color) at least for me. probably increases precision by 5 times.

Last edited:
I'll study your way tomorrow so I understand its value.

I'm a fan of psychophysics and there are approaches to increasing precision if necessary (multiple trials, method of constant stimuli, staircase procedures, etc.), so if your method avoids the limits of instrument precision then that would be wonderful.

As for on the fly LUT adjustments, see my post here.

Only way I know how to do it is through matlab psychtoolbox - it's straightforward, but would be nice to program it in something compilable or free/open source.

perhaps a script that modifies a .cal file and uses dispwin to implement changes could work.

One thing though - apparently windows is stupid, and there are certain constraints on adjusting the LUT - the LUT has to be somewhat monotincally increasing for one. See this post, which describes the nature of the limitation, and then this one for a precise account of the constraints. Even though those posts are years old, I think (but not 100% sure) that the constraints are still active. Not sure if this has been tested out of psychtoolbox though. I might ask Graeme (I can also ask him about on the fly LUT adjustments if we can't figure it out ourselves).

more measurements:

program: 95 ~ 123/0
hcfr:
95: 5.25
123/0: 5.25
123: 10.35

program: 58 ~ 74/0
58: 1.36
74/0: 1.35
74: 2.69
hard to estimate the error here... don't have enough digits from hcfr

Last edited:
probably has to do with the precision of your adjustments (for visual matching). You're currently adjusting the video level, which has 256 steps, each of which has a pre-defined luminance level. If you used LUT adjustments (which should be 10 bit precision for us), you might find you'd be able to get a better visual match. And then the measurements might be square as opposed to 1% off

probably has to do with the precision of your adjustments (for visual matching). You're currently adjusting the video level, which has 256 steps, each of which has a pre-defined luminance level.
i know, but i'm always trying to find pairs of colors where the grid and the solid are very close. if I just randomly select a color for the solid, there's maybe a 10% chance that I'd find a good match by adjusting the grill, due to 8bit.

but anyway, this 1% thing is defintiely not related.
123/0: 5.25
123: 10.35
more:

160/0: 10.40
160: 20.42
deviation from 50% (10.40 - 10.21)/10.21 = 1.9% !!!

blah this is hard to explain. maybe i'm just bad at explaining, but it's something that my intuition immediately told me when i tried the higher resolution.

basically, if the phosphor is linear, then the # of photons emitted is proportional to the # of electrons absorbed. then, the average luminance over an area would simply be proportional to the total number of electrons hitting that area. it wouldn't matter if the electrons were concentrated in lines or spread out evenly; the average luminance depends only on total number of electrons.

now suppose the phosphor is nonlinear. let's take an extreme example: suppose that the phosphor's response completely saturates when there are too many electrons hitting it. that is, once you fire enough electrons at it, firing more electrons won't make the phosphor any brighter. now, the average luminance over an area doesn't just depend on the total number of electrons but also how the electrons are distributed over that area. an even spread of electrons would result in higher average luminance than if the electrons were concentrated in sharp lines, in which case the phosphors that emit light would be saturated.

running the program at high resolution, the electrons hitting the grill are quite evenly spread out. but at a low resolution, the lines of the grill are more distinct; the electrons are concentrated in the lines. since I observed no change in behavior from different resolutions, i inferred that the phosphor is quite linear.

edit #324234:
just did some tests, the luminance does decrease by 0.5% or so when zooming into a grill. that means that phosphor nonlinearity could account for about half of the 1% thing.

whatever i'm not going to worry about this 1% thing any longer... it's really not a big deal.

Last edited:
maybe i'm missing something. Why the exclamation marks?

All I see is that one of your visual matches showed a 1% diff from "perfection", and another one of your matches showed a 1.9% difference. Why is this important?

bbtomorrow

basically, if the phosphor is linear, then the # of photons emitted is proportional to the # of electrons absorbed.

per unit time. # of emitted photons is proportional to beam current, which in turn is a measure of the temporal density, or rate of flow, of the electrons.

then, the average luminance over an area would simply be proportional to the total number of electrons hitting that area. it wouldn't matter if the electrons were concentrated in lines or spread out evenly; the average luminance depends only on total number of electrons.

no, see above.

If you understand the error in your thinking (assuming I'm correct in assessing your thinking), let me know if the rest of your post still makes sense.

just did some tests, the luminance does decrease by 0.5% or so when zooming into a grill. that means that phosphor nonlinearity could account for about half of the 1% thing.

Make sure that whatever software you're using to zoom doesn't resample. Doing so creates antialiasing which introduces extra luminance information to smooth out transitions. Use the method in irfanview from the guide (disable resampling with zooming).

i used gimp nearest neighbor scaling so for instance 1010 becomes 11001100

well actually #photons is proportional to #electrons. luminance is proportional to #photons per unit area per unit time. so luminance is proportional to average beam current over an area

but that doesnt really change my argument

running the program at high resolution, the electrons hitting the grill are quite evenly spread out. but at a low resolution, the lines of the grill are more distinct; the electrons are concentrated in the lines. since I observed no change in behavior from different resolutions, i inferred that the phosphor is quite linear.

When I get home I'll try to create some grilles at different resolutions (or run your program at diff resolutions - would that work?)

I don't yet have a good grasp of how pixel structure changes with different resolutions, and I'd need to examine some single pixel lines close up with my loupe.

I'm guessing halving the resolution means that, under ideal conditions, double the number of triads are illuminated for an on pixel, and double the number of triads are not illuminated for an off pixel. But perhaps the temporal characteristics of the video signal aren't as clean with higher resolutions as they are with lower resolutions, so you might end up with what I think is termed voltage roll-off (instead of sharp transitions in voltage), and a resulting lack of contrast modulation, which would mean that luminance might increase slightly with higher resolutions.

Anyway, I will do my best to grasp your cascading approach later this evening

yes voltage rolloff is an issue but only when using a vertical grill (i.e. llllllllll). for that the voltage would have to fluctuate really rapidly, but for a horizontal grill the voltage stays constant for each row, so the frequency is much lower and easier for the electronics to handle

yea i've always wondered about that. Given that you can render a horizontal line by keeping the voltage at peak throughout the sweep of the beam, there's no need to modulate it. But I'm pretty sure the signal is modulated up and down for each "pixel", right? But either way, the roll-off wouldn't affect much coz the aperture wires would block the effects of "non-sharp transitions", so long as the peak is maintained through the width of each pixel.

image for reference:

But I'm pretty sure the signal is modulated up and down for each "pixel", right?

doubt it. there would be terrible moire if there were. plus horizontal lines look completely uniform at 640x480

if it weren't modulated individually, wouldn't the video amplifier have to know in advance what the pixel value of the next pixel is?

In other words, I was under the assumption that after rendering each pixel, the amplifier returns the voltage down to baseline until the next pixel comes through in the chain. Isn't that how it works?

plus horizontal lines look completely uniform at 640x480

isn't that just because the width of the pixel is scaled up with lower resolutions? i.e. the voltage is at peak for a longer width on the screen.

i think it would just hold the pixel's color constant until the next pixel...
pretty sure if you plot the voltage as a function of time, it would be like

http://i.imgur.com/1U5nHKr.png

it doesn't make sense for pixels to be individually modulated because there would be too much moire at the "native resolution" where pixel density matches aperture grill density.

yea that makes sense - it's a more efficient system.

suppose I can adjust the LUT values for every level
suppose my instrument can only read with precision of 0.1 nits.
suppose I want 3 to be 0.25 nits.
I would temporarily adjust the LUT of 7 so that my instrument measures 4 nits
then i'd make a 7/0 grating and compare that to solid 6.
I'd temporarily adjust the LUT of 6 until it matches the grating. so 6 should be 2 nits.
repeat until I reach 3

I understand now

I might test this out with a target luminance that is measurable, yet requires, say, 5 iterations of matching, and see how accurate it is.

Will there be a new version of the guide that does not require eyeballing G2 and the green screen step following that?

Will there be a new version of the guide that does not require eyeballing G2 and the green screen step following that?

what other possible method is there other than eyeballing?

what other possible method is there other than eyeballing?

I saw you wrote something a page back about that. I.e. comparing two slides or two sides of the screen using a color meter. No?

Actually for clarification, using the two tone pattern as per your guide, am I supposed to adjust the G2 and the green screen until both sides of the screen are exactly the same?

Actually for clarification, using the two tone pattern as per your guide, am I supposed to adjust the G2 and the green screen until both sides of the screen are exactly the same?

yep. And even doing this requires careful perceptual considerations, such as dark adapting your visual system.

I saw you wrote something a page back about that. I.e. comparing two slides or two sides of the screen using a color meter. No?

If you were referring to this:

just realized something - you don't have to do this psychophysically. You can use the colorimeter to integrate the gratings.

completely different context. This quote was in the context of making LUT adjustments (outside of WinDAS). Had nothing to do with G2.

yep. And even doing this requires careful perceptual considerations, such as dark adapting your visual system.

I see. The G2 adjustment seems to be quite easy. The green screeb is much harder; sometimes I push it down a notch just to be sure.

is there any disadvantage to setting those too low, other than crushed blacks? like could it potentially decrease the monitor's lifespan?

No, my understanding is that it's quite the opposite, as a lower G2 results in less cathode loading (although I'm not clear if the reduced loading is a direct consequence of lowering G2, or due to the fact that lowering G2 means G1 doesn't need to be as negative (and a more negative G1 increases cathode loading)). I'm not super clear on this yet, but I'm quite confident that lowering G2 won't cause any harm to tube.

Yeah I highly doubt lowering G2 damages the tube. Higher G2 seems to work things harder, takes longer for black levels to stabilize.

Also for step 74, I don't quite understand what needs to be done (loading up the 16 bars and visually confirming that the hue of gray remains stable). Could you elaborate a bit more about this?

I found this other thread where you asked about G2 and was told you don't need to match 0% and 7%. I guess that's not how it's supposed to be done?

Yea I'm still unclear on the logic behind the pedestal approach, and I don't think Sotti was very confident about it either. But if you actually read the WinDAS instructions, it does ask you to make it barely visible against the 0 bar (e.g. very similar to just blending it right in). It's just a way to establish a black level - I don't think it gives you the best black level possible (which is why I prefer my approach).

I also know at least one professional studio who worked with a whole bunch of SGI FW900s and they turned the G2 way down relative to factory settings.

Also for step 74, I don't quite understand what needs to be done (loading up the 16 bars and visually confirming that the hue of gray remains stable). Could you elaborate a bit more about this?

It's just a visual confirmation that things are working well. You want to ensure that the grayscale pattern doesn't change its hue as you move the slider up and down. It's kinda redundant.

It's just a visual confirmation that things are working well. You want to ensure that the grayscale pattern doesn't change its hue as you move the slider up and down. It's kinda redundant.

Sorry you mean move it down until it doesn't change hue anymore?

No, just move the slider up and down, and just make sure that the hue doesn't change. Do you understand what I mean by hue?