<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Samiam's Scribble Pad &#187; Spherical</title>
	<atom:link href="http://www.hodge.net.au/sam/blog/tag/spherical/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.hodge.net.au/sam/blog</link>
	<description>Random Thoughts of Sam Hodge, about Life, Art and Technology</description>
	<lastBuildDate>Mon, 01 Dec 2025 07:20:55 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.5.1</generator>
		<item>
		<title>trying to calculate localVisibility with Spherical Harmonics</title>
		<link>http://www.hodge.net.au/sam/blog/2011/11/12/trying-to-calculate-localvisibility-with-spherical-harmonics/</link>
		<comments>http://www.hodge.net.au/sam/blog/2011/11/12/trying-to-calculate-localvisibility-with-spherical-harmonics/#comments</comments>
		<pubDate>Sat, 12 Nov 2011 06:59:04 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Harmonics]]></category>
		<category><![CDATA[Renderman]]></category>
		<category><![CDATA[Spherical]]></category>

		<guid isPermaLink="false">http://www.hodge.net.au/sam/blog/?p=361</guid>
		<description><![CDATA[In hidsight, baking a lookup table of vectors and the spherical harmonics, might lead to artifacts, but with 1024 samples it doesnt look too bad Feel free to download the source to sing along, its all based on the Sony Paper from 2003 see the PDF from SCEA Python executable that write Spherical Harmonics Renderman [...]]]></description>
				<content:encoded><![CDATA[<div id="attachment_386" class="wp-caption alignleft" style="width: 417px"><a href="http://www.hodge.net.au/sam/blog/wp-content/uploads/sh.png"><img src="http://www.hodge.net.au/sam/blog/wp-content/uploads/sh.png" alt="Spherical Harmonics Coefficients of Local Visibility" title="Cooefficients of Spherical Harmonics" width="407" height="409" class="size-full wp-image-386" /></a><p class="wp-caption-text">Spherical Harmonics Coefficients of Local Visibility</p></div>
<p>In hidsight, baking a lookup table of vectors and the spherical harmonics, might lead to artifacts, but with 1024 samples it doesnt look too bad</p>
<p>Feel free to download the source to sing along, its all based on the Sony Paper from 2003 see the <a href="http://www.research.scea.com/gdc2003/spherical-harmonic-lighting.pdf">PDF from SCEA</a></p>
<p>Python executable that write Spherical Harmonics Renderman header: <a href='http://www.hodge.net.au/sam/blog/wp-content/uploads/sh1.py'>sh1.py</a></p>
<p>Please find the resulting header file attached: <a href='http://www.hodge.net.au/sam/blog/wp-content/uploads/sh1.h'>SH.h</a></p>
<p>And a simple shader to calculate transmission based on the table of stratified samples above: <a href='http://www.hodge.net.au/sam/blog/wp-content/uploads/localvisibility1.sl'>localVisibility.sl</a></p>
<p>Its a bit clunky because I couldn&#8217;t work out how to do two dimensional arrays in RSL, im glad to fix it up if it is possible.</p>
<p>The preprocessor thing isnt that sweet either :/</p>
<p>As below:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
</pre></td><td class="code"><pre class="c" style="font-family:monospace;"><span style="color: #339933;">#include &quot;SH.h&quot;</span>
&nbsp;
surface localVisibility<span style="color: #009900;">&#40;</span>
        uniform <span style="color: #993333;">float</span> maxDistance <span style="color: #339933;">=</span> <span style="color: #0000dd;">10</span><span style="color: #339933;">;</span> 
        uniform string outputFolder <span style="color: #339933;">=</span> <span style="color: #ff0000;">&quot;&quot;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
        SHVECTOR
        SHSPH0
        SHSPH1
        SHCOEFF0
        SHCOEFF1
        SHCOEFF2
        SHCOEFF3
        SHCOEFF4
        SHCOEFF5
        SHCOEFF6
        SHCOEFF7
        SHCOEFF8
        vector Nworld <span style="color: #339933;">=</span> vector<span style="color: #009900;">&#40;</span>transform<span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;world&quot;</span><span style="color: #339933;">,</span>N<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        point Pworld <span style="color: #339933;">=</span> transform<span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;world&quot;</span><span style="color: #339933;">,</span>P<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        uniform <span style="color: #993333;">float</span> numSamples <span style="color: #339933;">=</span> <span style="color: #0000dd;">1024</span><span style="color: #339933;">;</span>
        uniform <span style="color: #993333;">float</span> numCoeffs <span style="color: #339933;">=</span> <span style="color: #0000dd;">9</span><span style="color: #339933;">;</span>
        varying <span style="color: #993333;">float</span> results<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">9</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">=</span><span style="color: #009900;">&#123;</span><span style="color: #0000dd;">0</span><span style="color: #339933;">,</span><span style="color: #0000dd;">0</span><span style="color: #339933;">,</span><span style="color: #0000dd;">0</span><span style="color: #339933;">,</span><span style="color: #0000dd;">0</span><span style="color: #339933;">,</span><span style="color: #0000dd;">0</span><span style="color: #339933;">,</span><span style="color: #0000dd;">0</span><span style="color: #339933;">,</span><span style="color: #0000dd;">0</span><span style="color: #339933;">,</span><span style="color: #0000dd;">0</span><span style="color: #339933;">,</span><span style="color: #0000dd;">0</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
        uniform <span style="color: #993333;">float</span> i<span style="color: #339933;">,</span>j<span style="color: #339933;">;</span>
        varying <span style="color: #993333;">float</span> faceforward <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>
        varying <span style="color: #993333;">float</span> occl <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>
        <span style="color: #b1b100;">for</span><span style="color: #009900;">&#40;</span>i<span style="color: #339933;">=</span><span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>i<span style="color: #339933;">&lt;</span>numSamples<span style="color: #339933;">;</span>i<span style="color: #339933;">=</span>i<span style="color: #339933;">+</span><span style="color: #0000dd;">1</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
                <span style="color: #993333;">float</span> Hs <span style="color: #339933;">=</span> samplesVector<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span>.<span style="color: #202020;">Nworld</span><span style="color: #339933;">;</span>
                point destinationWorld <span style="color: #339933;">=</span> Pworld <span style="color: #339933;">+</span> samplesVector<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span><span style="color: #339933;">*</span>maxDistance<span style="color: #339933;">;</span>
                point destinationCurrent <span style="color: #339933;">=</span> transform<span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;world&quot;</span><span style="color: #339933;">,</span><span style="color: #ff0000;">&quot;current&quot;</span><span style="color: #339933;">,</span>destinationWorld<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>Hs <span style="color: #339933;">&gt;</span> <span style="color: #0000dd;">0</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
                        faceforward <span style="color: #339933;">+=</span> <span style="color: #0000dd;">1</span><span style="color: #339933;">;</span>
                        <span style="color: #993333;">float</span> isHit <span style="color: #339933;">=</span> comp<span style="color: #009900;">&#40;</span>transmission<span style="color: #009900;">&#40;</span>P<span style="color: #339933;">,</span>destinationCurrent<span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span><span style="color: #0000dd;">0</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                        <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>isHit <span style="color: #339933;">&gt;</span> <span style="color: #0000dd;">0</span><span style="color: #009900;">&#41;</span>
                        <span style="color: #009900;">&#123;</span>
                                occl <span style="color: #339933;">+=</span> <span style="color: #0000dd;">1</span><span style="color: #339933;">;</span>
                                <span style="color: #b1b100;">for</span><span style="color: #009900;">&#40;</span>j<span style="color: #339933;">=</span><span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>j<span style="color: #339933;">&lt;</span>numCoeffs<span style="color: #339933;">;</span>j<span style="color: #339933;">=</span>j<span style="color: #339933;">+</span><span style="color: #0000dd;">1</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
                                        varying <span style="color: #993333;">float</span> value <span style="color: #339933;">=</span> isHit<span style="color: #339933;">;</span>
                                        <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>j <span style="color: #339933;">==</span> <span style="color: #0000dd;">0</span><span style="color: #009900;">&#41;</span>
                                        <span style="color: #009900;">&#123;</span>
                                                value <span style="color: #339933;">*=</span> samplesCoeffs0<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
                                        <span style="color: #009900;">&#125;</span>
                                        <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>j <span style="color: #339933;">==</span> <span style="color: #0000dd;">1</span><span style="color: #009900;">&#41;</span>
                                        <span style="color: #009900;">&#123;</span>
                                                value <span style="color: #339933;">*=</span> samplesCoeffs1<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
                                        <span style="color: #009900;">&#125;</span>
                                        <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>j <span style="color: #339933;">==</span> <span style="color: #0000dd;">2</span><span style="color: #009900;">&#41;</span>
                                        <span style="color: #009900;">&#123;</span>
                                                value  <span style="color: #339933;">*=</span> samplesCoeffs2<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
                                        <span style="color: #009900;">&#125;</span>
                                        <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>j <span style="color: #339933;">==</span> <span style="color: #0000dd;">3</span><span style="color: #009900;">&#41;</span>
                                        <span style="color: #009900;">&#123;</span>
                                                value <span style="color: #339933;">*=</span> samplesCoeffs3<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
                                        <span style="color: #009900;">&#125;</span>
                                        <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>j <span style="color: #339933;">==</span> <span style="color: #0000dd;">4</span><span style="color: #009900;">&#41;</span>
                                        <span style="color: #009900;">&#123;</span>
                                                value <span style="color: #339933;">*=</span> samplesCoeffs4<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
                                        <span style="color: #009900;">&#125;</span>
                                        <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>j <span style="color: #339933;">==</span> <span style="color: #0000dd;">5</span><span style="color: #009900;">&#41;</span>
                                        <span style="color: #009900;">&#123;</span>
                                                value <span style="color: #339933;">*=</span> samplesCoeffs5<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
                                        <span style="color: #009900;">&#125;</span>
                                        <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>j <span style="color: #339933;">==</span> <span style="color: #0000dd;">6</span><span style="color: #009900;">&#41;</span>
                                        <span style="color: #009900;">&#123;</span>
                                                value <span style="color: #339933;">*=</span> samplesCoeffs6<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
                                        <span style="color: #009900;">&#125;</span>
                                        <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>j <span style="color: #339933;">==</span> <span style="color: #0000dd;">7</span><span style="color: #009900;">&#41;</span>
                                        <span style="color: #009900;">&#123;</span>
                                                value <span style="color: #339933;">*=</span> samplesCoeffs7<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
                                        <span style="color: #009900;">&#125;</span>
                                        <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>j <span style="color: #339933;">==</span> <span style="color: #0000dd;">8</span><span style="color: #009900;">&#41;</span>
                                        <span style="color: #009900;">&#123;</span>
                                                value <span style="color: #339933;">*=</span> samplesCoeffs8<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
                                        <span style="color: #009900;">&#125;</span>
                                        results<span style="color: #009900;">&#91;</span>j<span style="color: #009900;">&#93;</span> <span style="color: #339933;">+=</span> value<span style="color: #339933;">;</span>
&nbsp;
                                        <span style="color: #009900;">&#125;</span>       
                                <span style="color: #009900;">&#125;</span>
                        <span style="color: #009900;">&#125;</span> 
                <span style="color: #009900;">&#125;</span>
        <span style="color: #b1b100;">for</span> <span style="color: #009900;">&#40;</span>j<span style="color: #339933;">=</span><span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>j<span style="color: #339933;">&lt;</span>numCoeffs<span style="color: #339933;">;</span>j<span style="color: #339933;">=</span>j<span style="color: #339933;">+</span><span style="color: #0000dd;">1</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>    
                results<span style="color: #009900;">&#91;</span>j<span style="color: #009900;">&#93;</span> <span style="color: #339933;">/=</span> faceforward<span style="color: #339933;">;</span>
                <span style="color: #009900;">&#125;</span>
        occl <span style="color: #339933;">/=</span> faceforward<span style="color: #339933;">;</span>
        faceforward <span style="color: #339933;">/=</span> numSamples<span style="color: #339933;">;</span>
        Ci <span style="color: #339933;">=</span> color<span style="color: #009900;">&#40;</span>results<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span>results<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">1</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span>results<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">2</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        Oi <span style="color: #339933;">=</span> <span style="color: #0000dd;">1</span><span style="color: #339933;">;</span>
        Ci <span style="color: #339933;">*=</span> Oi<span style="color: #339933;">;</span>
&nbsp;
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>I dont think it is working yet, but it compiles and renders</p>
<p>Sam</p>
]]></content:encoded>
			<wfw:commentRss>http://www.hodge.net.au/sam/blog/2011/11/12/trying-to-calculate-localvisibility-with-spherical-harmonics/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
