tag:blogger.com,1999:blog-89178268142433817302024-02-07T02:47:56.332-05:00The Mongoose BarksTerry Hendrix IIhttp://www.blogger.com/profile/03721894942984178169noreply@blogger.comBlogger125125tag:blogger.com,1999:blog-8917826814243381730.post-91507702951063897992016-06-14T02:06:00.002-05:002016-06-14T02:06:20.571-05:00Cheap IBL + reflections testQuick post showing a quick WIP of a cheap all realtime IBL + reflections solution for my VR engine. Nothing really fancy to show here except that the project is still going. It's kind of annoying having to manually index and project for a linear cubemap format too. I may do a pass to convert to lat + long to reduce maps and sampling a la GTA later too. Right now the next step is to do importance sampling reference in realtime before going too far into screen space ray tracing and compute maddness. I also added support for 'metalness' materials back for this scene. It might be worth looking into a metalness only pipeline or even deferred texturing for VR just for GBuffer reduction to help aging GPUs. The annoying part is this scene is all one FBX, so I ended up fixing some FBX compiler issues with per polygon materials not cooking properly. I think it ends up being quite a bit of submeshes without instancing.<br />
<br />
Looking into GI and related features next most likely if not SDFs for fluids and shadows or finishing up the OIT system for more than fluids.<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiiAqDJ1UGs8uXToYa41nv_NBWWTEOfJQT8FqeZx_MKXUg_rsuZqdbPrdMieWpDHhfhvQr3MFnClguDOoMi1NEAdt7Ps2P9hLe9GjSLpLJjgUq-47NM6eofeWlStyIctBcw_z0sU0-u7xY/s1600/kagura-0.15.0-20160613-090719-0000.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="180" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiiAqDJ1UGs8uXToYa41nv_NBWWTEOfJQT8FqeZx_MKXUg_rsuZqdbPrdMieWpDHhfhvQr3MFnClguDOoMi1NEAdt7Ps2P9hLe9GjSLpLJjgUq-47NM6eofeWlStyIctBcw_z0sU0-u7xY/s320/kagura-0.15.0-20160613-090719-0000.png" width="320" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;"><span style="font-size: 12.8px;">Indirect Lighting ON</span><br style="font-size: 12.8px;" /><span style="font-size: 12.8px;">Direct Lighting ON<br />Reflections ON</span></td></tr>
</tbody></table>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEggcSBOxZpDufDIvA5lvxWOxMTOtMbkAP-pK1ovAUa1SZ6TzKbd-yI6hMxCHZNMcEGHe-LZIzP_R7OechlTbhbX-QZRgMn8WHU_6_E-qRAaFSozGROB4Ys9lm7_V9stqgLtkdxN7Xffrbk/s1600/kagura-0.15.0-20160613-090545-0000.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="180" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEggcSBOxZpDufDIvA5lvxWOxMTOtMbkAP-pK1ovAUa1SZ6TzKbd-yI6hMxCHZNMcEGHe-LZIzP_R7OechlTbhbX-QZRgMn8WHU_6_E-qRAaFSozGROB4Ys9lm7_V9stqgLtkdxN7Xffrbk/s320/kagura-0.15.0-20160613-090545-0000.png" width="320" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Direct Lighting ON<br />Indirect Lighting ON<br style="font-size: 12.8px;" /><span style="font-size: 12.8px;">Reflections OFF</span></td></tr>
</tbody></table>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjYXD9twqA6v10eSPbVy2JlzYeHRn7YGtsgyLJ8hdeADmaMPeLRAb0dzqUMRdja1Xn4qGlwcQGMQ-fKWaWmk780GgZWH5X4j6k8EpmDF0HHe00iNs0qnaI3GQfwKN5lZ9QjEzcVXHNfRBo/s1600/kagura-0.15.0-20160613-090604-0000.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="180" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjYXD9twqA6v10eSPbVy2JlzYeHRn7YGtsgyLJ8hdeADmaMPeLRAb0dzqUMRdja1Xn4qGlwcQGMQ-fKWaWmk780GgZWH5X4j6k8EpmDF0HHe00iNs0qnaI3GQfwKN5lZ9QjEzcVXHNfRBo/s320/kagura-0.15.0-20160613-090604-0000.png" width="320" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Indirect Lighting ON<br />Direct Lighting OFF<br style="font-size: 12.8px;" /><span style="font-size: 12.8px;">Reflections OFF</span></td></tr>
</tbody></table>
<br />Terry Hendrix IIhttp://www.blogger.com/profile/03721894942984178169noreply@blogger.com0tag:blogger.com,1999:blog-8917826814243381730.post-74290140995271123362016-05-16T13:25:00.002-05:002016-05-23T18:39:29.705-05:00SteamVR (beta) under Linux<b>Update 20160523</b><br />
Forgot to update this at the end of the week. Busy with work. :)<br />
<br />
Turns out I needed to kick the compositor right after submitting both texture refs ( I output a single target, but it updates in one pass instead of two ). After that I don't have Dutch orange as a background anymore. I should also clarify that my demo doesn't need any user setup to run with Vive at all once the driver config steps are done once. Unlike ye olde DK2 setup where you need to HUP the ovr daemon, or older SteamVr vrserver --keepalive.<br />
<br />
Sadly as noted before the UV support for single target appears to not work under Linux SteamVR in the sense it applies the values incorrectly by splitting the single target twice. The same test in Windows SteamVR outputs as expected. Also the SteamVR compositor tends to have a window title as well. I could likely hack around the title issue using a WM hint mutation program like DevilsPie2 for GNOME if needed.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhVAK32cx7MiWDoTVV_1ukFw58H1vEQOXgMEZzQ-ESys-CX2YrQA9a3X5FtSJs2auqKDOF2Pm7ChxUcHmfg4_X5V-UyeJ92HtXSFQomkcWjt3DwiNzzCP5IJb-CUSNhsqtCh6-cCTxlL10/s1600/SteamVrBetaLinux.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="177" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhVAK32cx7MiWDoTVV_1ukFw58H1vEQOXgMEZzQ-ESys-CX2YrQA9a3X5FtSJs2auqKDOF2Pm7ChxUcHmfg4_X5V-UyeJ92HtXSFQomkcWjt3DwiNzzCP5IJb-CUSNhsqtCh6-cCTxlL10/s320/SteamVrBetaLinux.png" width="320" /></a></div>
<br />
<br />
<b>It almost works, rendering and compositing anyway...</b><br />
For the curious this is as far as I got SteamVR ( beta ) and hellovr running under Linux at present. This is using my fork of OpenVR.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgb89khYgP_0qbWetDIv3pDFwXy8mcGffSNvavVeSVvFgdy8ruexxhPB7s2k9q_gTTiyQ-ptF6rKBWYhB1wb4stiLcABSyiLeKni8UntMBcpaAtjjlE_UxqWW_Q1bKhus3zTqF_0gUty_E/s1600/Screenshot+from+2016-05-16+17%253A43%253A23.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="116" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgb89khYgP_0qbWetDIv3pDFwXy8mcGffSNvavVeSVvFgdy8ruexxhPB7s2k9q_gTTiyQ-ptF6rKBWYhB1wb4stiLcABSyiLeKni8UntMBcpaAtjjlE_UxqWW_Q1bKhus3zTqF_0gUty_E/s320/Screenshot+from+2016-05-16+17%253A43%253A23.png" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<br />
Right now my game is just drawing orange to the compositor, so stay tuned. I might hack it up this week if I get enough time. Before this was all extended mode hacks under Linux. :3<br />
<br />
<br />
<b>Poorly written up dump of what I had to do to get beta running</b><br />
Shared in the hopes it helps someone. I'm not sure why I had to manually create json files and add paths, so beware only tested on my box. Also I may have forgot some change I did locally. :3<br />
<br />
If you're using my OpenVR fork remember hellovr searches for the PNG in the '..' path. Also note if you copy your lighthousedb.json files from a Windows machine they should auto downgrade to the older SteamVR version. I didn't do an strace to see if some files such as chaperone_info.vrchap are even read, but be aware they exist on Windows SteamVR.<br />
<br />
<div class="sect2">
<h3 id="_lib_path">
Lib path</h3>
<div class="listingblock">
<div class="content">
<!-- Generator: GNU source-highlight 3.1.6
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
<br />
<tt>export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/thendrix/Steam/SteamApps/common/SteamVR/bin/linux64:/home/thendrix/Steam/SteamApps/common/SteamVR/drivers/lighthouse/bin/linux64</tt>
</div>
</div>
</div>
<b><br /></b>
<b>USB permissions
</b><br />
<div class="listingblock">
<div class="content">
<!-- Generator: GNU source-highlight 3.1.6
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
<br />
<div>
<tt>sudo chmod a+rw /dev/hidraw*</tt></div>
</div>
</div>
<b><br /></b>
<b>Steam/config/streamvr.vrsettings - ( May need to comment out bodys if this fails )</b><br />
<div class="listingblock">
<div class="content monospaced">
<pre>{
"jsonid" : "vrsettings",
"steamvr" : {</pre>
<pre> // "automaticDirectModeEnabled" : true,
// "requestDirectModeDisabled" : false,
// "requestDirectModeEnabled" : false,
"ipd": 0.0635,
"forcedDriver": "lighthouse",
"forcedHmd": "",
"requireHmd": true,
"displayDebug": false,
"enableDistortion": true,
"displayDebugX": 0,
"displayDebugY": 0,
"sendSystemButtonToAllApps": false,
"loglevel": 3
"background": "backgrounds/image_%d.png"
},
"driver_lighthouse": {
"disableimu": false,
"usedisambiguation": "tdm",
"disambiguationdebug": 0,
"primarybasestation": 0,
"lighthousename": "",
"maxincidenceangledegrees": 60.0,
"uselighthousedirect": true,
"dbhistory": false,
"originoffsetx": 0.0,
"originoffsety": 1.0,
"originoffsetz": 0.0,
"headingoffset": 0.0,
},
"driver_null" : {
// drivers are searched in alphabetical order, so you may need steamvr.forcedDriver="null" as well
"enable": true,
"id": "Null Driver",
"serialNumber": "Null 4711",
"modelNumber": "Null Model Number",
"windowX": 100,
"windowY": 100,
"windowWidth": 1920,
"windowHeight": 1080,
"renderWidth": 1344,
"renderHeight": 1512,
"secondsFromVsyncToPhotons": 0.1,
"displayFrequency": 90
},
"version" : "1"
}
</pre>
<pre></pre>
<pre></pre>
</div>
</div>
<b>Path registry setup</b><br />
<div class="listingblock">
<div class="content monospaced">
<pre>thendrix@xenophon ~/Steam/SteamApps/common/SteamVR/bin/linux64 $ ./vrpathreg --help
Commands:
show - Display the current paths
setruntime <path> - Sets the runtime path
setthis - Sets the runtime path to the runtime that vrpathreg lives in
setconfig <path> - Sets the config path
setlog <path> - Sets the log path
adddriver <path> - Adds an external driver
removedriver <path> - Removes an external driver
...
thendrix@xenophon ~/Steam/SteamApps/common/SteamVR/bin/linux64 $ ./vrpathreg
Runtime path = /home/thendrix/Steam/SteamApps/common/SteamVR/
Config path = /home/thendrix/Steam/config/
Log path = /home/thendrix/Steam/logs</path></path></path></path></pre>
</div>
</div>
Terry Hendrix IIhttp://www.blogger.com/profile/03721894942984178169noreply@blogger.com0tag:blogger.com,1999:blog-8917826814243381730.post-56023912893577530472016-05-16T01:31:00.002-05:002016-05-18T00:59:48.315-05:00Linux OpenVR hacksAfter trolling the steam forums a few days ago with this:<br />
https://plus.google.com/+TerryHendrixII/posts/F6PR4mprHrD<br />
<br />
I notice this today:<br />
http://www.vronlinux.com/articles/adventures-with-openvr-and-the-vive-on-linux.8<br />
<br />
<br />
Hopefully have an update at the end of the week. :)<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhHRJ1kXc4pQAVouekYWJoa1XMQboxFJV8lSlc_kc9qhomVmdhlyhWPK8CaZOgo7y_fZBTs68MI8Q9XfaBOFzEAd5d3_bjd7_XJvxfVym0Iu_jYzdAl0LDktAGEqTXfkyzYiJR7UPuzh5k/s1600/HMDWaterPostSad.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhHRJ1kXc4pQAVouekYWJoa1XMQboxFJV8lSlc_kc9qhomVmdhlyhWPK8CaZOgo7y_fZBTs68MI8Q9XfaBOFzEAd5d3_bjd7_XJvxfVym0Iu_jYzdAl0LDktAGEqTXfkyzYiJR7UPuzh5k/s320/HMDWaterPostSad.png" width="305" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;"><span style="font-size: small; text-align: start;">First time I tested on an HMD in a while, and I notice the new deferred water isn't setup correctly. Pretty handy to have a dynamic RT browser.</span></td></tr>
</tbody></table>
<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
Bonus for those wondering there is a branchless way to do screen-space pass UVs for single target + serialized | two target parallel. Blogger makes it painful to post source... sorry if it screws it up after I hit update. :)<br />
<br />
<div id="content">
<div class="listingblock">
<div class="content">
<!-- Generator: GNU source-highlight 3.1.6
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
<br />
<pre><tt><span style="font-size: x-small;">out <span style="color: teal;">vec2</span> v_Texcoord<span style="color: #990000;">;</span>
<span style="color: #009900;">void</span> <span style="font-weight: bold;"><span style="color: black;">main</span></span><span style="color: #990000;">()</span>
<span style="color: red;">{</span>
<span style="font-style: italic;"><span style="color: #9a1900;">// Fullscreen clipped triangle.</span></span>
<span style="color: #009900;">int</span> x <span style="color: #990000;">=</span> <span style="color: #990000;">(</span> gl_VertexID <span style="color: #990000;"><<</span> <span style="color: #993399;">1</span> <span style="color: #990000;">)</span> <span style="color: #990000;">&</span> <span style="color: #993399;">2</span><span style="color: #990000;">;</span>
<span style="color: #009900;">int</span> y <span style="color: #990000;">=</span> gl_VertexID <span style="color: #990000;">&</span> <span style="color: #993399;">2</span><span style="color: #990000;">;</span>
v_Texcoord <span style="color: #990000;">=</span> <span style="font-weight: bold;"><span style="color: black;">vec2</span></span><span style="color: #990000;">(</span> x<span style="color: #990000;">,</span> y <span style="color: #990000;">);</span>
gl_Position <span style="color: #990000;">=</span> <span style="font-weight: bold;"><span style="color: black;">vec4</span></span><span style="color: #990000;">(</span> v_Texcoord <span style="color: #990000;">*</span> <span style="font-weight: bold;"><span style="color: black;">vec2</span></span><span style="color: #990000;">(</span> <span style="color: #993399;">2.0</span><span style="color: #990000;">,</span> <span style="color: #993399;">2.0</span> <span style="color: #990000;">)</span> <span style="color: #990000;">+</span> <span style="font-weight: bold;"><span style="color: black;">vec2</span></span><span style="color: #990000;">(</span> <span style="color: #990000;">-</span><span style="color: #993399;">1.0</span><span style="color: #990000;">,</span> <span style="color: #990000;">-</span><span style="color: #993399;">1.0</span> <span style="color: #990000;">),</span> <span style="color: #993399;">0.0</span><span style="color: #990000;">,</span> <span style="color: #993399;">1.0</span> <span style="color: #990000;">);</span>
<span style="color: #009900;">
</span></span></tt></pre>
<pre><tt><span style="font-size: x-small;"><span style="color: #009900;">
</span></span></tt></pre>
<pre><tt><span style="font-size: x-small;"><span style="color: #009900;"><pre style="color: black;"><tt><span style="font-size: x-small;"> <span style="font-style: italic;"><span style="color: #9a1900;">// Monoscopic : 2.0, RightEye : 1.0, LeftEye : 0.0</span></span>
<span style="font-style: italic;"><span style="color: #9a1900;">// { scale = 1, offset = 0 }; { scale = 0.5, offset = 0.5 }; { scale = 0.5, offset = 0.0 }</span></span></span></tt></pre>
</span></span></tt></pre>
<pre><tt><span style="font-size: x-small;"><span style="color: #009900;"> int</span> i <span style="color: #990000;">=</span> <span style="color: #009900;">int</span><span style="color: #990000;">(</span><span style="font-weight: bold;"><span style="color: black;">floor</span></span><span style="color: #990000;">(</span> _Eye <span style="color: #990000;">))</span> <span style="color: #990000;">>></span> <span style="color: #993399;">1</span><span style="color: #990000;">;</span></span></tt><span style="color: #9a1900; font-size: x-small; font-style: italic;"> </span></pre>
<pre><tt><span style="font-size: x-small;"> <span style="color: #009900;">float</span> stereo <span style="color: #990000;">=</span> <span style="color: #993399;">1.0</span> <span style="color: #990000;">-</span> i<span style="color: #990000;">;</span>
<span style="color: #009900;">float</span> scale <span style="color: #990000;">=</span> <span style="color: #993399;">1.0</span> <span style="color: #990000;">-</span> <span style="color: #993399;">0.5</span> <span style="color: #990000;">*</span> stereo<span style="color: #990000;">;</span>
<span style="color: #009900;">float</span> offset <span style="color: #990000;">=</span> <span style="color: #993399;">0.5</span> <span style="color: #990000;">*</span> _Eye <span style="color: #990000;">*</span> stereo<span style="color: #990000;">;</span>
v_Texcoord<span style="color: #990000;">.</span>x <span style="color: #990000;">=</span> v_Texcoord<span style="color: #990000;">.</span>x <span style="color: #990000;">*</span> scale <span style="color: #990000;">+</span> offset<span style="color: #990000;">;</span>
<span style="color: red;">}</span></span>
</tt></pre>
</div>
</div>
</div>
Terry Hendrix IIhttp://www.blogger.com/profile/03721894942984178169noreply@blogger.com0tag:blogger.com,1999:blog-8917826814243381730.post-6678600127116565302016-05-15T23:37:00.000-05:002016-05-15T23:37:04.966-05:00Hhmm... oh yeahI switched over to IMGUI a while back for a debug UI. Currently I have an accordion-style property editor w/ inline material editing et al. Not as fully featured as the HTML interface, but easier for blokes with just laptops. :3<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhgdnjcMckGvZkSx8bD9gh7hszwwstXB2Qv0V5efnPRtfuh6PovCc8V49808_WY0hgknHB_TPhyphenhyphen5flFrEESr3iypqaAc8cLMG3yF46dQSjUqVCb8p4KLdzQNrTxoSlg2jqkJBRiAP7gbnU/s1600/kagura-0.15.0-20160515-213057-0000.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="200" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhgdnjcMckGvZkSx8bD9gh7hszwwstXB2Qv0V5efnPRtfuh6PovCc8V49808_WY0hgknHB_TPhyphenhyphen5flFrEESr3iypqaAc8cLMG3yF46dQSjUqVCb8p4KLdzQNrTxoSlg2jqkJBRiAP7gbnU/s320/kagura-0.15.0-20160515-213057-0000.png" width="320" /></a></div>
<br />Terry Hendrix IIhttp://www.blogger.com/profile/03721894942984178169noreply@blogger.com0tag:blogger.com,1999:blog-8917826814243381730.post-30179253420635158192016-01-30T12:40:00.001-05:002016-02-04T18:40:36.194-05:00Noise!<b>Update</b>: Screenshots with realistic sized trees on same terrain, and fixed some links. :3<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhggYdp5ZGtmTUcvroIwltsoLFp2g8Lr5FBsq1FytnJDh3nwfapQ0L70dcQadlgddiZwekrBvRl6sAnER-tiZeIUM0i3Cxa9omJZzT0Rnw_spBbZ4DxCybA9vKSOHqrvPlzPFiINaZYCdQ/s1600/kagura-0.15.0-20160204-175819-0000.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="180" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhggYdp5ZGtmTUcvroIwltsoLFp2g8Lr5FBsq1FytnJDh3nwfapQ0L70dcQadlgddiZwekrBvRl6sAnER-tiZeIUM0i3Cxa9omJZzT0Rnw_spBbZ4DxCybA9vKSOHqrvPlzPFiINaZYCdQ/s320/kagura-0.15.0-20160204-175819-0000.png" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgsHin88Q0Tqsu-8djMktA2E0YtvZl6NoRTkPw7I3BragiGzdZ0Axaj4a6rQqqzL5AWCZozva5etA5DhsTsl0QuGmz-DnkP_gANeURtBF7-6f77TaEnIWu0AphCj7YcIdLnJonvA20ZV5A/s1600/kagura-0.15.0-20160204-182246-0000.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="180" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgsHin88Q0Tqsu-8djMktA2E0YtvZl6NoRTkPw7I3BragiGzdZ0Axaj4a6rQqqzL5AWCZozva5etA5DhsTsl0QuGmz-DnkP_gANeURtBF7-6f77TaEnIWu0AphCj7YcIdLnJonvA20ZV5A/s320/kagura-0.15.0-20160204-182246-0000.png" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<i>Tree scale now in 10-20m range.</i></div>
<br />
<br />
I noticed <a href="https://www.reddit.com/r/proceduralgeneration" target="_blank">r/proceduralgeneration</a> has a lot activity lately, so I thought I would do quick post on how I'm generating my current test islands with only 4 functions. This is what they typically look like:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgQS9rfa9pSkytYHIyhd5JuiC4BoMFBLkmhiCDqCiaCQv5XBXj_qw6J9iu-afrN2PmWvban1PGZOhGAjrMxxxumn03CXfS_KjyxVJBAgR9oYN2vsS_ECGozpsq99dyrpbM2WkVyQvi-qsI/s1600/kagura-0.15.0-20160130-002137-0000.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="180" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgQS9rfa9pSkytYHIyhd5JuiC4BoMFBLkmhiCDqCiaCQv5XBXj_qw6J9iu-afrN2PmWvban1PGZOhGAjrMxxxumn03CXfS_KjyxVJBAgR9oYN2vsS_ECGozpsq99dyrpbM2WkVyQvi-qsI/s320/kagura-0.15.0-20160130-002137-0000.png" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<i>Terrain generated by simple density function.</i></div>
<br />
<b>Terrian Geometry</b><br />
I basically use both 2d and 3d simplex noise to add and subtract a global density function, which is described per terrain cube. You can stack cubes like octrees, or more typically just a simple XZ grid. This density function is used to produce voxels, which are then in turn converted to meshes for physics and rendering. I don't use GPU rendering of the voxels as I need that GPU time for VR. :3<br />
<br />
All of this is done in realtime via the clever use of worker threads with the option to serialize them out as models. Each cube is typically 256 meters. Yes, this means if you want really tall mountains you need to stack another layer of cubes on top of your XZ grid.<br />
<br />
This listing shows how I build the density function to pass into a now obsolete KaMeshComponent, which will then in turn start deferred creation of the meshes for physics and rendering. The above island is solely defined as as the global density function:<br />
<br />
<!-- Listing 1 -->
<br />
<div id="content">
<div class="listingblock">
<div class="content">
<!-- Generator: GNU source-highlight 3.1.6
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
<br />
<pre><tt><span style="font-weight: bold;"><span style="color: blue;">local</span></span> density <span style="color: #990000;">=</span> KaDensity<span style="color: #990000;">.</span><span style="font-weight: bold;"><span style="color: black;">Create</span></span><span style="color: #990000;">()</span>
KaDensity<span style="color: #990000;">.</span><span style="font-weight: bold;"><span style="color: black;">Seed</span></span><span style="color: #990000;">(</span> density<span style="color: #990000;">,</span> <span style="color: #993399;">2312.0</span><span style="color: #990000;">,</span> <span style="color: #993399;">0.0</span><span style="color: #990000;">,</span> <span style="color: #993399;">561.972</span> <span style="color: #990000;">)</span>
KaDensity<span style="color: #990000;">.</span><span style="font-weight: bold;"><span style="color: black;">AddFractalNoise2d</span></span><span style="color: #990000;">(</span> density<span style="color: #990000;">,</span> <span style="color: #993399;">6</span><span style="color: #990000;">,</span> <span style="color: #993399;">32.0</span><span style="color: #990000;">,</span> <span style="color: #993399;">8.0</span><span style="color: #990000;">,</span> <span style="color: #993399;">0.0</span><span style="color: #990000;">,</span> <span style="color: #993399;">32.0</span> <span style="color: #990000;">)</span>
KaDensity<span style="color: #990000;">.</span><span style="font-weight: bold;"><span style="color: black;">AddFractalNoise2d</span></span><span style="color: #990000;">(</span> density<span style="color: #990000;">,</span> <span style="color: #993399;">10</span><span style="color: #990000;">,</span> <span style="color: #993399;">8.0</span><span style="color: #990000;">,</span> <span style="color: #993399;">8.0</span><span style="color: #990000;">,</span> <span style="color: #993399;">0.0</span><span style="color: #990000;">,</span> <span style="color: #993399;">8.0</span> <span style="color: #990000;">)</span>
KaDensity<span style="color: #990000;">.</span><span style="font-weight: bold;"><span style="color: black;">SubFractalNoise2d</span></span><span style="color: #990000;">(</span> density<span style="color: #990000;">,</span> <span style="color: #993399;">10</span><span style="color: #990000;">,</span> <span style="color: #993399;">64.0</span><span style="color: #990000;">,</span> <span style="color: #993399;">8.0</span><span style="color: #990000;">,</span> <span style="color: #993399;">0.0</span><span style="color: #990000;">,</span> <span style="color: #993399;">6.0</span> <span style="color: #990000;">)</span>
KaDensity<span style="color: #990000;">.</span><span style="font-weight: bold;"><span style="color: black;">AddFractalNoise3d</span></span><span style="color: #990000;">(</span> density<span style="color: #990000;">,</span> <span style="color: #993399;">3</span><span style="color: #990000;">,</span> <span style="color: #993399;">32.0</span><span style="color: #990000;">,</span> <span style="color: #993399;">4.5</span> <span style="color: #990000;">)</span></tt></pre>
<i></i><br />
<div style="text-align: center;">
<i><i>listing 1</i></i></div>
<i>
</i></div>
<div class="content">
<br /></div>
<div class="content">
Notice there is little use of 3d, as that is more for making hills, caves, rivers, and arches. Also you could introduce local density for features, but I don't typically do any manual level editing at this point in project. This is one of my small islands used for testing materials.</div>
<div class="content">
<br /></div>
<div class="content">
<br class="Apple-interchange-newline" />
<span style="font-weight: bold;">Terrian Material</span><br />
The terrain is composed from a simple triplanar shader. World height, world slope, and a per pixel Fractal Brownian Motion ( FBM ) to break up the monotony of ground foliage. There are typically beach sand, dirt, grass ( eg green to brown / height ), and stone generated from this step. Since you can modify shaders at runtime in kagura this can be fun to improve when you have a few extra minutes in the day.<br />
<br />
<br class="Apple-interchange-newline" />
<span style="font-weight: bold;">Terrian Foliage</span></div>
<div class="content">
Once terrain geometry is instanced it will be filled with large vegetation and deco such as bushes and trees to rocks and statues. For every XY terrain sector I generate a SpawnTracer. The spawner will 'ping' for the worker threads to be done by ray casting for terrain to appear in its given sector. Once this is done it issues the given spawn callback. In this case the callback is a per sector foliage trace driven again by a grid pattern filtered by a tillable FBM ( see <a href="http://mongooseichiban.blogspot.com/2015/12/screenshot-sat.html" target="_blank">old blog post</a> ), slope, height, max per tile count of an object type, and a few other attributes. This pass handles the case where a house is placed on terrain for example, so it would not put trees and grass on top of it. It is important to note these happen out of order, and the tiling pattern provided by the FBM is the trick making smooth transitions between tiles possible.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgR8mFjVSJjq0i7tpOqV-CUdAc1lC8FpeanbcEkBUAxqy8ddxkUnoBgJo6lQrTR5YiN-1ugCnP8B6TOyOj517AVqaa_3FBF3iDalAd3SDqugPrPBLAqPSHVG53j4p3SBvTWKrQLs6iva8s/s1600/kagura-0.15.0-20160130-123928-0000.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="180" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgR8mFjVSJjq0i7tpOqV-CUdAc1lC8FpeanbcEkBUAxqy8ddxkUnoBgJo6lQrTR5YiN-1ugCnP8B6TOyOj517AVqaa_3FBF3iDalAd3SDqugPrPBLAqPSHVG53j4p3SBvTWKrQLs6iva8s/s320/kagura-0.15.0-20160130-123928-0000.png" width="320" /></a></div>
<div style="text-align: center;">
<i>Closer look at the same scene</i></div>
<br />
<br />
That's basically how the system works, and it's a little more complex than that but not much. I'd be happy to answer any questions or take comments. Here's a script function that creates the entire island above:<br />
<br /></div>
</div>
</div>
<!-- listing 2 -->
<br />
<div id="content">
<div class="listingblock">
<div class="content">
<!-- Generator: GNU source-highlight 3.1.6
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
<br />
<pre><tt><span style="font-weight: bold;"><span style="color: blue;">function</span></span> VoxelTerrainComponent<span style="color: #990000;">.</span><span style="font-weight: bold;"><span style="color: black;">OnCreate</span></span><span style="color: #990000;">(</span> self <span style="color: #990000;">)</span>
<span style="font-weight: bold;"><span style="color: blue;">local</span></span> sz <span style="color: #990000;">=</span> self<span style="color: #990000;">.</span>width
<span style="font-weight: bold;"><span style="color: blue;">local</span></span> hsz <span style="color: #990000;">=</span> self<span style="color: #990000;">.</span>height
<span style="font-weight: bold;"><span style="color: blue;">local</span></span> scale <span style="color: #990000;">=</span> <span style="color: #993399;">256.0</span>
<span style="font-weight: bold;"><span style="color: blue;">local</span></span> density <span style="color: #990000;">=</span> KaDensity<span style="color: #990000;">.</span><span style="font-weight: bold;"><span style="color: black;">Create</span></span><span style="color: #990000;">()</span>
KaDensity<span style="color: #990000;">.</span><span style="font-weight: bold;"><span style="color: black;">Seed</span></span><span style="color: #990000;">(</span> density<span style="color: #990000;">,</span> <span style="color: #993399;">2312.0</span><span style="color: #990000;">,</span> <span style="color: #993399;">0.0</span><span style="color: #990000;">,</span> <span style="color: #993399;">561.972</span> <span style="color: #990000;">)</span>
KaDensity<span style="color: #990000;">.</span><span style="font-weight: bold;"><span style="color: black;">AddFractalNoise2d</span></span><span style="color: #990000;">(</span> density<span style="color: #990000;">,</span> <span style="color: #993399;">6</span><span style="color: #990000;">,</span> <span style="color: #993399;">32.0</span><span style="color: #990000;">,</span> <span style="color: #993399;">8.0</span><span style="color: #990000;">,</span> <span style="color: #993399;">0.0</span><span style="color: #990000;">,</span> <span style="color: #993399;">32.0</span> <span style="color: #990000;">)</span>
KaDensity<span style="color: #990000;">.</span><span style="font-weight: bold;"><span style="color: black;">AddFractalNoise2d</span></span><span style="color: #990000;">(</span> density<span style="color: #990000;">,</span> <span style="color: #993399;">10</span><span style="color: #990000;">,</span> <span style="color: #993399;">8.0</span><span style="color: #990000;">,</span> <span style="color: #993399;">8.0</span><span style="color: #990000;">,</span> <span style="color: #993399;">0.0</span><span style="color: #990000;">,</span> <span style="color: #993399;">8.0</span> <span style="color: #990000;">)</span>
KaDensity<span style="color: #990000;">.</span><span style="font-weight: bold;"><span style="color: black;">SubFractalNoise2d</span></span><span style="color: #990000;">(</span> density<span style="color: #990000;">,</span> <span style="color: #993399;">10</span><span style="color: #990000;">,</span> <span style="color: #993399;">64.0</span><span style="color: #990000;">,</span> <span style="color: #993399;">8.0</span><span style="color: #990000;">,</span> <span style="color: #993399;">0.0</span><span style="color: #990000;">,</span> <span style="color: #993399;">6.0</span> <span style="color: #990000;">)</span>
KaDensity<span style="color: #990000;">.</span><span style="font-weight: bold;"><span style="color: black;">AddFractalNoise3d</span></span><span style="color: #990000;">(</span> density<span style="color: #990000;">,</span> <span style="color: #993399;">3</span><span style="color: #990000;">,</span> <span style="color: #993399;">32.0</span><span style="color: #990000;">,</span> <span style="color: #993399;">4.5</span> <span style="color: #990000;">)</span>
<span style="font-weight: bold;"><span style="color: blue;">for</span></span> x <span style="color: #990000;">=</span> <span style="color: #990000;">-</span>sz<span style="color: #990000;">,</span> sz <span style="font-weight: bold;"><span style="color: blue;">do</span></span>
<span style="font-weight: bold;"><span style="color: blue;">for</span></span> y <span style="color: #990000;">=</span> <span style="color: #993399;">0</span><span style="color: #990000;">,</span> hsz <span style="font-weight: bold;"><span style="color: blue;">do</span></span>
<span style="font-weight: bold;"><span style="color: blue;">for</span></span> z <span style="color: #990000;">=</span> <span style="color: #990000;">-</span>sz<span style="color: #990000;">,</span> sz <span style="font-weight: bold;"><span style="color: blue;">do</span></span>
<span style="font-weight: bold;"><span style="color: blue;">local</span></span> name <span style="color: #990000;">=</span> <span style="color: red;">"VoxelMesh_"</span> <span style="color: #990000;">..</span> x <span style="color: #990000;">..</span> <span style="color: red;">"_"</span> <span style="color: #990000;">..</span> y <span style="color: #990000;">..</span> <span style="color: red;">"_"</span> <span style="color: #990000;">..</span> z
<span style="font-weight: bold;"><span style="color: blue;">local</span></span> dump <span style="color: #990000;">=</span> <span style="color: red;">'Cache/'</span> <span style="color: #990000;">..</span> name <span style="color: #990000;">..</span> <span style="color: red;">'.asset'</span>
<span style="font-weight: bold;"><span style="color: blue;">local</span></span> sector <span style="color: #990000;">=</span> KaGameObject<span style="color: #990000;">.</span><span style="font-weight: bold;"><span style="color: black;">New</span></span><span style="color: #990000;">(</span> x <span style="color: #990000;">*</span> scale<span style="color: #990000;">,</span> y <span style="color: #990000;">*</span> scale<span style="color: #990000;">,</span> z <span style="color: #990000;">*</span> scale <span style="color: #990000;">)</span>
KaGameObject<span style="color: #990000;">.</span><span style="font-weight: bold;"><span style="color: black;">SetName</span></span><span style="color: #990000;">(</span> sector<span style="color: #990000;">,</span> name <span style="color: #990000;">)</span>
KaMeshComponent<span style="color: #990000;">.</span><span style="font-weight: bold;"><span style="color: black;">CreateFromVoxels</span></span><span style="color: #990000;">(</span> sector<span style="color: #990000;">,</span> density<span style="color: #990000;">,</span> dump<span style="color: #990000;">,</span> self<span style="color: #990000;">.</span>material<span style="color: #990000;">,</span> x<span style="color: #990000;">,</span> y<span style="color: #990000;">,</span> z <span style="color: #990000;">)</span>
KaGameObject<span style="color: #990000;">.</span><span style="font-weight: bold;"><span style="color: black;">Finalize</span></span><span style="color: #990000;">(</span> sector <span style="color: #990000;">)</span>
KaGameObject<span style="color: #990000;">.</span><span style="font-weight: bold;"><span style="color: black;">Hide</span></span><span style="color: #990000;">(</span> sector <span style="color: #990000;">)</span>
KaGameObject<span style="color: #990000;">.</span><span style="font-weight: bold;"><span style="color: black;">AddChild</span></span><span style="color: #990000;">(</span> self<span style="color: #990000;">.</span>_GameObject<span style="color: #990000;">,</span> sector <span style="color: #990000;">)</span>
<span style="font-weight: bold;"><span style="color: blue;">if</span></span> self<span style="color: #990000;">.</span>foliage <span style="font-weight: bold;"><span style="color: blue;">and</span></span> y <span style="color: #990000;">==</span> <span style="color: #993399;">0.0</span> <span style="font-weight: bold;"><span style="color: blue;">then</span></span>
<span style="font-style: italic;"><span style="color: #9a1900;">-- Place spawners and mappers in the middle of the voxel sector.</span></span>
<span style="font-weight: bold;"><span style="color: blue;">local</span></span> offset <span style="color: #990000;">=</span> scale <span style="color: #990000;">*</span> <span style="color: #993399;">0.5</span>
<span style="font-weight: bold;"><span style="color: black;">SpawnByTracePrefabChild</span></span><span style="color: #990000;">(</span> <span style="color: red;">"FoliageSpawner"</span><span style="color: #990000;">,</span> self<span style="color: #990000;">.</span>_GameObject<span style="color: #990000;">,</span>
x <span style="color: #990000;">*</span> scale <span style="color: #990000;">+</span> offset<span style="color: #990000;">,</span>
y <span style="color: #990000;">*</span> scale <span style="color: #990000;">+</span> scale <span style="color: #990000;">*</span> <span style="color: #993399;">0.75</span><span style="color: #990000;">,</span>
z <span style="color: #990000;">*</span> scale <span style="color: #990000;">+</span> offset<span style="color: #990000;">,</span>
<span style="font-style: italic;"><span style="color: #9a1900;">-- VoxelSectorFoliageCb )</span></span>
VoxelSectorFoliageFbmCb <span style="color: #990000;">)</span>
<span style="font-weight: bold;"><span style="color: blue;">end</span></span>
<span style="font-weight: bold;"><span style="color: blue;">end</span></span>
<span style="font-weight: bold;"><span style="color: blue;">end</span></span>
<span style="font-weight: bold;"><span style="color: blue;">end</span></span>
<span style="font-weight: bold;"><span style="color: blue;">end</span></span></tt></pre>
<i></i><br />
<div style="text-align: center;">
<i><i>listing 2</i></i><br />
<div style="text-align: left;">
<i><i><br /></i></i></div>
<div style="text-align: left;">
<i><i><br /></i></i></div>
<div style="text-align: left;">
And here's what you can do with unfiltered 3d noise:</div>
<div style="text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhl-ISXGdb4LC6sGzIxgjzFbXqX8RQFNsRDRzh8daXVBdzvVXrNp5DAJt5TWR2yxkLp3M1ntx0HjTpisDBXnf9aBYNNnkukVcn0RmEO5WonDoH5lPvBORUDCmlelihJ6CR8yvFtHGYaDiQ/s1600/kagura-0.15.0-20160128-170004-0000.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="180" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhl-ISXGdb4LC6sGzIxgjzFbXqX8RQFNsRDRzh8daXVBdzvVXrNp5DAJt5TWR2yxkLp3M1ntx0HjTpisDBXnf9aBYNNnkukVcn0RmEO5WonDoH5lPvBORUDCmlelihJ6CR8yvFtHGYaDiQ/s320/kagura-0.15.0-20160128-170004-0000.png" width="320" /></a></div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
<br /></div>
<i><i><br /></i></i>
<i><i><br /></i></i>
<i><i><br /></i></i>
<i><i><br /></i></i></div>
<i>
</i></div>
</div>
</div>
Terry Hendrix IIhttp://www.blogger.com/profile/03721894942984178169noreply@blogger.com0tag:blogger.com,1999:blog-8917826814243381730.post-7858614459064307692016-01-27T16:19:00.001-05:002016-01-27T16:19:36.911-05:00Always check visualizations...You generally don't want collisions much less generate contact points between static objects. :3<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgWKgVuFlxaYhxbtWrWIen0xl63Kb-hGMiFhqid8yGi2fLOvdFMj_1C2uHR2_IvT2XMNPWPr2p1UczsTSjFB47l-K12cmOSgFQatIz87Ylw9InG66D7eDsjgQaHAWYkcz4nvXTtokoMTwU/s1600/kagura-0.15.0-20160127-161434-0000.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="180" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgWKgVuFlxaYhxbtWrWIen0xl63Kb-hGMiFhqid8yGi2fLOvdFMj_1C2uHR2_IvT2XMNPWPr2p1UczsTSjFB47l-K12cmOSgFQatIz87Ylw9InG66D7eDsjgQaHAWYkcz4nvXTtokoMTwU/s320/kagura-0.15.0-20160127-161434-0000.png" width="320" /></a></div>
<br />Terry Hendrix IIhttp://www.blogger.com/profile/03721894942984178169noreply@blogger.com0tag:blogger.com,1999:blog-8917826814243381730.post-64160915297971051702016-01-26T12:40:00.003-05:002016-01-26T13:32:06.779-05:00Got HMD working again...<div class="separator" style="clear: both; text-align: left;">
Dug my DK2 back out, and got it hooked back up in my engine. I somehow had emitter simulations run per eye per frame instead of per frame. Also need to enforce soft particles in VR maybe. What a productive lunch break.</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhhttjelrEguiUZC9QRWtv9YhK86b_rDDKXlDhGRegdGeuVHdwng5ZpO_1GfBv568-FxPB_6IIdJu-NA5zKP3pNZHcwZfBwaq-YQc1eG703Xi9aNw0foQJKRyiBvnBDV2STFWpZftpGLFk/s1600/kagura-0.15.0-20160126-123527-0000.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="180" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhhttjelrEguiUZC9QRWtv9YhK86b_rDDKXlDhGRegdGeuVHdwng5ZpO_1GfBv568-FxPB_6IIdJu-NA5zKP3pNZHcwZfBwaq-YQc1eG703Xi9aNw0foQJKRyiBvnBDV2STFWpZftpGLFk/s320/kagura-0.15.0-20160126-123527-0000.png" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
Mismatched per eye.</div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEidMu8S8qKUteoaxI8Isk6ws2TWjZ-FVEU1xxdJkxu2khyvH23_tlrQoqn_FJrfmoyFCJnfRtyJcGQ2ZF1lzVEay9D1f_wAc-ZJcbTVgSQi8mNPNijTvcr0F_fsneO1sDzcbX7DnVvefb4/s1600/kagura-0.15.0-20160126-125353-0000.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="180" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEidMu8S8qKUteoaxI8Isk6ws2TWjZ-FVEU1xxdJkxu2khyvH23_tlrQoqn_FJrfmoyFCJnfRtyJcGQ2ZF1lzVEay9D1f_wAc-ZJcbTVgSQi8mNPNijTvcr0F_fsneO1sDzcbX7DnVvefb4/s320/kagura-0.15.0-20160126-125353-0000.png" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
Much better. :3</div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgQVI_mTsGQoZRRZrXGN6hyphenhyphenfI51ldHIDUhsFK8LPTFP05opVrJ5Xy4CbxCPNFEabdMkKLTS2MRWFo_c8lOVUtS3xJ5cbiWREv7_zkrXEFqr-_YMyzBzBsJEe0zS8KAV82W7BcAkO3lhI1s/s1600/kagura-0.15.0-20160126-130650-0000.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="180" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgQVI_mTsGQoZRRZrXGN6hyphenhyphenfI51ldHIDUhsFK8LPTFP05opVrJ5Xy4CbxCPNFEabdMkKLTS2MRWFo_c8lOVUtS3xJ5cbiWREv7_zkrXEFqr-_YMyzBzBsJEe0zS8KAV82W7BcAkO3lhI1s/s320/kagura-0.15.0-20160126-130650-0000.png" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
Double-checked shadows and reflection probe are once per frame. ;3</div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
Update a walk in the woods...</div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div style="text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgABeCmedxCgv9fp7utaYgiLv5k68xZZYftJs-0fe9RVHmAbp9kRux7SoUI2KaC4-DJdU4Dlq9GRV6ocYXGh_cEp-1o114LFO_gEN7-25J1c6SuP1b4VHJJqp7AAfbKoXFUNqBhYPc9Jx0/s1600/kagura-0.15.0-20160126-132628-0000r.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="180" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgABeCmedxCgv9fp7utaYgiLv5k68xZZYftJs-0fe9RVHmAbp9kRux7SoUI2KaC4-DJdU4Dlq9GRV6ocYXGh_cEp-1o114LFO_gEN7-25J1c6SuP1b4VHJJqp7AAfbKoXFUNqBhYPc9Jx0/s320/kagura-0.15.0-20160126-132628-0000r.png" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg4ZR8ZPO2XGGB6YMVgT_g8bfGxzNuXlhOuHEM8XyA4T1_OqeqTz_QG4p3qSii5ReH_0W9CExt-F55Pr3K8y5VBQFjy1DJY9n47D10yBYPjuxzgmCdyiXSL9l-cSOEHne5CIvmU7q_WVls/s1600/kagura-0.15.0-20160126-132048-0000r.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="180" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg4ZR8ZPO2XGGB6YMVgT_g8bfGxzNuXlhOuHEM8XyA4T1_OqeqTz_QG4p3qSii5ReH_0W9CExt-F55Pr3K8y5VBQFjy1DJY9n47D10yBYPjuxzgmCdyiXSL9l-cSOEHne5CIvmU7q_WVls/s320/kagura-0.15.0-20160126-132048-0000r.png" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh9jE8oEhm4teCDAMjd2w_kARHPAtTzxhKjR90Ia6-4j18ddPrljYFYtdEhyg6wI5PXf4T09PzrYtcttgOrH6W0JeB3MHP2dgC-Y6SFzOoZ5n3QDD0AHoeZ3E1ZltP-VOsomTPtsUWPZx4/s1600/kagura-0.15.0-20160126-132132-0000r.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="180" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh9jE8oEhm4teCDAMjd2w_kARHPAtTzxhKjR90Ia6-4j18ddPrljYFYtdEhyg6wI5PXf4T09PzrYtcttgOrH6W0JeB3MHP2dgC-Y6SFzOoZ5n3QDD0AHoeZ3E1ZltP-VOsomTPtsUWPZx4/s320/kagura-0.15.0-20160126-132132-0000r.png" width="320" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
Very Large Area Test.</div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgSj8v30tVbtPgioubRsxIOBe7I9LRuqGbogHJn_VxBORhMLq2Y_ps6F03aSNBC5P2n44AJxGJ30NiltppCFO3-Nh3VUMvw31Gdn7xcjj4FeQIJTZwf1pmBkkryIXTOKaeMt38MXG3od1c/s1600/kagura-0.15.0-20160126-131641-0000.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="180" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgSj8v30tVbtPgioubRsxIOBe7I9LRuqGbogHJn_VxBORhMLq2Y_ps6F03aSNBC5P2n44AJxGJ30NiltppCFO3-Nh3VUMvw31Gdn7xcjj4FeQIJTZwf1pmBkkryIXTOKaeMt38MXG3od1c/s320/kagura-0.15.0-20160126-131641-0000.png" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
Same Area in with HMD off vsync'ed 60Hz.</div>
Terry Hendrix IIhttp://www.blogger.com/profile/03721894942984178169noreply@blogger.com0tag:blogger.com,1999:blog-8917826814243381730.post-50027785431763234502016-01-23T01:34:00.001-05:002016-01-23T01:34:19.987-05:00Animation Curves R Us<div class="separator" style="clear: both; text-align: left;">
Integrated my curves editor into the existing in-game UI. Now the hard part is not using curves for everything under the sun. I'm not sure if I want to make a dopesheet et al too as I'm not remaking blender. Basically for the in-game editing you can click a 'button' to pop open the curve editor for a given curve. This is also controllable from Lua script and remote HTML / telnet sessions into the game of course. I'll refine the prototype a bit more with wrapping modes, better UX, et al.</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhxnDn2isLj8sEZADyi04Y3I4X_wyQOBltCgoV5plvU5OskoBKEsC4BNN_MoWSS4DMjX0hr4SYvUa9JzGBWlQwOphyMUqzOMCVZefp2UkXyUprSg9V4d9HA4jo75fEMNVbfj9jBEeXtKEY/s1600/kagura-0.15.0-20160123-010512-0000.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="180" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhxnDn2isLj8sEZADyi04Y3I4X_wyQOBltCgoV5plvU5OskoBKEsC4BNN_MoWSS4DMjX0hr4SYvUa9JzGBWlQwOphyMUqzOMCVZefp2UkXyUprSg9V4d9HA4jo75fEMNVbfj9jBEeXtKEY/s320/kagura-0.15.0-20160123-010512-0000.png" width="320" /></a></div>
<br />Terry Hendrix IIhttp://www.blogger.com/profile/03721894942984178169noreply@blogger.com0tag:blogger.com,1999:blog-8917826814243381730.post-67701661974371528922016-01-21T14:38:00.002-05:002016-01-21T14:38:47.471-05:00Everything is better with splines.<div class="separator" style="clear: both; text-align: left;">
Everyone knows I prefer to have my UI in a browser, but I couldn't help myself and started making an in-game viewport spline editor for you kids on laptops. Not much yet, but I'm tempted to make a full widget set to replace TwAnt. I'm currently doing batching for all 2d lines, and of course I do width adjustments by their normals for visibility. You could make <a href="https://www.mapbox.com/blog/drawing-antialiased-lines/" target="_blank">fancy AA/feathered lines</a> with more primitives, but this is fine for my current uses. Always remember LINES primitive has shitty support on AMD, and it looks bad anyway so spare a quad or a couple triangles and do it right.</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
Playing around with some prototypes in screenshot below:</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhq-X3XAAHdZIyOihGYhFVEWeXLvSh399oWqXHZNeKpvTAUQAWPyAxSVmK8DBwNWUqfQB5g1IyEsPgZFZERlo_r-G6zJesmIGR7nlC-tHa39u_NMsKHYFH1kBG08lrTn_KJsXx-7eeqi8o/s1600/kagura-0.15.0-20160121-142523-0000.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="180" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhq-X3XAAHdZIyOihGYhFVEWeXLvSh399oWqXHZNeKpvTAUQAWPyAxSVmK8DBwNWUqfQB5g1IyEsPgZFZERlo_r-G6zJesmIGR7nlC-tHa39u_NMsKHYFH1kBG08lrTn_KJsXx-7eeqi8o/s320/kagura-0.15.0-20160121-142523-0000.png" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
Greatly improved from earlier today after adding a windowing canvas:</div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhvyAhtzPzFttaKFvSEN_wJKAUmMOprZsiDgzEItmxFjUwn6sGust07LMAgRNU0TCT-e-k7Rez79lSB8jsi9jw2osr8WtIoUST5cR2cAI2I6mml8fD0YIwmweAGADjg6UgZ6DtKKUMSbzY/s1600/kagura-0.15.0-20160121-124619-0000.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="180" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhvyAhtzPzFttaKFvSEN_wJKAUmMOprZsiDgzEItmxFjUwn6sGust07LMAgRNU0TCT-e-k7Rez79lSB8jsi9jw2osr8WtIoUST5cR2cAI2I6mml8fD0YIwmweAGADjg6UgZ6DtKKUMSbzY/s320/kagura-0.15.0-20160121-124619-0000.png" width="320" /></a></div>
<br />Terry Hendrix IIhttp://www.blogger.com/profile/03721894942984178169noreply@blogger.com0tag:blogger.com,1999:blog-8917826814243381730.post-58319043586151259202016-01-14T21:05:00.001-05:002016-01-14T21:05:06.458-05:00Import your 3d models into blender from file manager or terminal.<div id="content">
<div class="listingblock">
<div class="content">
<!-- Generator: GNU source-highlight 3.1.6
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
<pre><tt><span style="font-style: italic;"><span style="color: #9a1900;"># Simple script to import models from the command line or via "default application".</span></span>
<span style="font-style: italic;"><span style="color: #9a1900;">#</span></span>
<span style="font-style: italic;"><span style="color: #9a1900;"># 1. Copy the next line into something like blender-import.sh</span></span>
<span style="font-style: italic;"><span style="color: #9a1900;"># /path/to/blender --python /path/to/blender-import.py -- $1</span></span>
<span style="font-style: italic;"><span style="color: #9a1900;">#</span></span>
<span style="font-style: italic;"><span style="color: #9a1900;"># 2. Set as your "default application" to open 3ds, fbx, and obj files.</span></span>
<span style="font-style: italic;"><span style="color: #9a1900;"># a. Right-click on filename.fbx</span></span>
<span style="font-style: italic;"><span style="color: #9a1900;"># b. Open With > Other Application...</span></span>
<span style="font-style: italic;"><span style="color: #9a1900;"># c. Browse to the blender-import.sh in the dialog that pops-up. ( Click folder icon. )</span></span>
<span style="font-style: italic;"><span style="color: #9a1900;"># d. Click "Set as Default"</span></span>
<span style="font-style: italic;"><span style="color: #9a1900;">#</span></span>
<span style="font-style: italic;"><span style="color: #9a1900;"># 2016.01, thendrix</span></span>
<span style="font-style: italic;"><span style="color: #9a1900;">#</span></span>
<span style="font-style: italic;"><span style="color: #9a1900;"># https://www.blender.org/api/blender_python_api_2_76b_release/bpy.ops.import_scene.html</span></span>
<span style="font-style: italic;"><span style="color: #9a1900;">#</span></span>
<span style="font-weight: bold;"><span style="color: navy;">import</span></span> bpy<span style="color: #990000;">,</span> sys
<span style="font-weight: bold;"><span style="color: blue;">if</span></span> sys<span style="color: #990000;">.</span>argv<span style="color: #990000;">[-</span><span style="color: #993399;">1</span><span style="color: #990000;">].</span><span style="font-weight: bold;"><span style="color: black;">lower</span></span><span style="color: #990000;">().</span><span style="font-weight: bold;"><span style="color: black;">endswith</span></span><span style="color: #990000;">(</span> <span style="color: red;">".3ds"</span> <span style="color: #990000;">):</span>
bpy<span style="color: #990000;">.</span>ops<span style="color: #990000;">.</span>import_scene<span style="color: #990000;">.</span><span style="font-weight: bold;"><span style="color: black;">autodesk_3ds</span></span><span style="color: #990000;">(</span>filepath<span style="color: #990000;">=</span>sys<span style="color: #990000;">.</span>argv<span style="color: #990000;">[-</span><span style="color: #993399;">1</span><span style="color: #990000;">])</span>
<span style="font-weight: bold;"><span style="color: blue;">elif</span></span> sys<span style="color: #990000;">.</span>argv<span style="color: #990000;">[-</span><span style="color: #993399;">1</span><span style="color: #990000;">].</span><span style="font-weight: bold;"><span style="color: black;">lower</span></span><span style="color: #990000;">().</span><span style="font-weight: bold;"><span style="color: black;">endswith</span></span><span style="color: #990000;">(</span> <span style="color: red;">".fbx"</span> <span style="color: #990000;">):</span>
bpy<span style="color: #990000;">.</span>ops<span style="color: #990000;">.</span>import_scene<span style="color: #990000;">.</span><span style="font-weight: bold;"><span style="color: black;">fbx</span></span><span style="color: #990000;">(</span>filepath<span style="color: #990000;">=</span>sys<span style="color: #990000;">.</span>argv<span style="color: #990000;">[-</span><span style="color: #993399;">1</span><span style="color: #990000;">])</span>
<span style="font-weight: bold;"><span style="color: blue;">elif</span></span> sys<span style="color: #990000;">.</span>argv<span style="color: #990000;">[-</span><span style="color: #993399;">1</span><span style="color: #990000;">].</span><span style="font-weight: bold;"><span style="color: black;">lower</span></span><span style="color: #990000;">().</span><span style="font-weight: bold;"><span style="color: black;">endswith</span></span><span style="color: #990000;">(</span> <span style="color: red;">".obj"</span> <span style="color: #990000;">):</span>
bpy<span style="color: #990000;">.</span>ops<span style="color: #990000;">.</span>import_scene<span style="color: #990000;">.</span><span style="font-weight: bold;"><span style="color: black;">obj</span></span><span style="color: #990000;">(</span>filepath<span style="color: #990000;">=</span>sys<span style="color: #990000;">.</span>argv<span style="color: #990000;">[-</span><span style="color: #993399;">1</span><span style="color: #990000;">])</span></tt></pre>
</div>
</div>
</div>
Terry Hendrix IIhttp://www.blogger.com/profile/03721894942984178169noreply@blogger.com0tag:blogger.com,1999:blog-8917826814243381730.post-74950837938091768802016-01-14T01:13:00.004-05:002016-01-14T01:35:36.770-05:00Fun continuesGot ye olde particle system back up this week, and while laying the groundwork for a new animation system finally looking into "real" curve editors to drive animations of all types. Here's some screenshots of a material testing as I reworked a few materials and shaders in-between the engine updates.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEglc6f0r1vBGzOBfUiMnrgMHG71O12YH7cMLaFJTlMZwq9yJx0tLRldawv3i7YxmYJ3WeaKQ1VFcIacdzY4BGtIFcWslIARpCf66h3aF3CQojBEQbtcLAwejZsaUTCkUwQdE9YuGLcl5p8/s1600/kagura-0.15.0-20160113-215513-0000.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="180" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEglc6f0r1vBGzOBfUiMnrgMHG71O12YH7cMLaFJTlMZwq9yJx0tLRldawv3i7YxmYJ3WeaKQ1VFcIacdzY4BGtIFcWslIARpCf66h3aF3CQojBEQbtcLAwejZsaUTCkUwQdE9YuGLcl5p8/s320/kagura-0.15.0-20160113-215513-0000.png" width="320" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEge67c524swjoK5xK1PVbltXuzhC9TTfK8z4OfvM1n0vrPTIFfydDQWRv1ecDMujMReFnWdiWmdGJYxBPFc8ntZmiVHTj4IjaPelDlVScIcfuy6IrfXZOBocrW7jcOopHIKLK46f2_JwZU/s1600/kagura-0.15.0-20160114-010759-crop-lo.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEge67c524swjoK5xK1PVbltXuzhC9TTfK8z4OfvM1n0vrPTIFfydDQWRv1ecDMujMReFnWdiWmdGJYxBPFc8ntZmiVHTj4IjaPelDlVScIcfuy6IrfXZOBocrW7jcOopHIKLK46f2_JwZU/s320/kagura-0.15.0-20160114-010759-crop-lo.png" width="211" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjqI05LqGMFzV6Vpm_NZnsfjB2Zq0003LRXnchxwcE3LIaRApRcAzUIyRqRixzGuuMkyADNY7mmw0hWk8hdw9qcc0a9Rylh458nOGfZrA7bA2A_v5xmyMBGYNZ5hhEbQF6gDhfN-GeRig4/s1600/kagura-0.15.0-20160114-010759-crop.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjqI05LqGMFzV6Vpm_NZnsfjB2Zq0003LRXnchxwcE3LIaRApRcAzUIyRqRixzGuuMkyADNY7mmw0hWk8hdw9qcc0a9Rylh458nOGfZrA7bA2A_v5xmyMBGYNZ5hhEbQF6gDhfN-GeRig4/s320/kagura-0.15.0-20160114-010759-crop.png" width="211" /></a></div>
<br />
Since I'm still not doing a real-time probe you can see artifacts from the fallback "skylight", such as the bright blue reflection in the eyes here.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjZAgU3KrQwqYSxUpJZXGvaVRwoaLJM_fLPqQqQB51R7a8M0Y3KLjVHm7aH_VV6Ke2vaYXdpQ8W9aGFPsHGhDTHhDvYJZ9Im87DjVkjveA1ej7hJJdicSoyeTgFlC6aJa0f1vMLe5tFApo/s1600/kagura-0.15.0-20160114-013224-small.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjZAgU3KrQwqYSxUpJZXGvaVRwoaLJM_fLPqQqQB51R7a8M0Y3KLjVHm7aH_VV6Ke2vaYXdpQ8W9aGFPsHGhDTHhDvYJZ9Im87DjVkjveA1ej7hJJdicSoyeTgFlC6aJa0f1vMLe5tFApo/s320/kagura-0.15.0-20160114-013224-small.png" width="244" /></a></div>
<br />Terry Hendrix IIhttp://www.blogger.com/profile/03721894942984178169noreply@blogger.com0tag:blogger.com,1999:blog-8917826814243381730.post-27962740240000969672016-01-08T11:27:00.004-05:002016-01-08T11:43:27.534-05:00Ambient Occlusion TestHooked up AO for the test character I barrowed, and fixed a few material issues. Visualization of AO affecting the fallback skylight on the left, and AO off on the right. The final image is with AO on both sides. I like to do a lot of material testing with a simple directional light shader like this as I can reload shaders via the HTTP interface in my engine, and it will back prop changes to materials as needed as well. Fast iteration!<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi6PCKSBqY8wHYaRm3BmR8WXyzETMbSsU61OKEIBg6PdGvMJZZh2FtUJTNhAQPgSZGDaHyoh3YgR-XUmEgpNiRX5WvlHPLLKB9Bjp9JYu2P1Uf6x3K4tFXL1-2wlGsg5LCDxOt6Faj0WPY/s1600/kagura-0.15.0-20160108-AO-right-NoAO-vis.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi6PCKSBqY8wHYaRm3BmR8WXyzETMbSsU61OKEIBg6PdGvMJZZh2FtUJTNhAQPgSZGDaHyoh3YgR-XUmEgpNiRX5WvlHPLLKB9Bjp9JYu2P1Uf6x3K4tFXL1-2wlGsg5LCDxOt6Faj0WPY/s320/kagura-0.15.0-20160108-AO-right-NoAO-vis.png" width="210" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
AO visualization, left: on, right: off</div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjEFitYoT0DQmptlx3lBvxXIc9rx4z1fJeLe9qogJYJC0H1NtxVmfMuh6pm98gZC3ux6FGgddTmcTIzrIKlnvEHXrVL-cLvO3r8fiBimIKQyo-uu0pHA5-CfHDykXbELBMAZDOkhTqVuPI/s1600/kagura-0.15.0-20160108-AO-right-NoAO.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjEFitYoT0DQmptlx3lBvxXIc9rx4z1fJeLe9qogJYJC0H1NtxVmfMuh6pm98gZC3ux6FGgddTmcTIzrIKlnvEHXrVL-cLvO3r8fiBimIKQyo-uu0pHA5-CfHDykXbELBMAZDOkhTqVuPI/s320/kagura-0.15.0-20160108-AO-right-NoAO.png" width="210" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
left: on, right: off</div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjDZhAqBl3Po_2gn1id4U1wBRAXWvX3kdrkcJhW4Fvc28dO7D5f5DR_CtTqzmdM8PWQSex1FYVOBgbzlv5-RrcYExlkxm7a7JIGONQWKAveeSgHqoB2isKhpLel3RecxnHLaJqvzaTle7I/s1600/kagura-0.15.0-20160108-AO.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjDZhAqBl3Po_2gn1id4U1wBRAXWvX3kdrkcJhW4Fvc28dO7D5f5DR_CtTqzmdM8PWQSex1FYVOBgbzlv5-RrcYExlkxm7a7JIGONQWKAveeSgHqoB2isKhpLel3RecxnHLaJqvzaTle7I/s320/kagura-0.15.0-20160108-AO.png" width="210" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
Normal AO on</div>
<br />
Here's the in-game G-Buffer visualization, and note I only clear parts of my MRT as I stencil out non-deffered in the geometry pass. That's why you see the wavey lines on some visualizations.<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhnS0aa5c2Q4JpVN-Z5KNKIMZVIPURTgZ9T8twirSI5DewFH6FylohD88EA-gaLHPRTgaoPUsIokiY_vjdd9oyBxq1av-dQO_dQZfw6623uw-hZvVvJcvtkLOomdSONQuZDeJRCvWIgHE4/s1600/kagura-0.15.0-20160108-113814-0000.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="180" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhnS0aa5c2Q4JpVN-Z5KNKIMZVIPURTgZ9T8twirSI5DewFH6FylohD88EA-gaLHPRTgaoPUsIokiY_vjdd9oyBxq1av-dQO_dQZfw6623uw-hZvVvJcvtkLOomdSONQuZDeJRCvWIgHE4/s320/kagura-0.15.0-20160108-113814-0000.png" width="320" /></a></div>
<br />Terry Hendrix IIhttp://www.blogger.com/profile/03721894942984178169noreply@blogger.com0tag:blogger.com,1999:blog-8917826814243381730.post-61661433456140033342016-01-06T22:48:00.000-05:002016-01-07T13:32:50.388-05:00FBX support almost finishedMigrating away from md5mesh to FBX, since that's the standard as far as content folks are concerned. Loaded up some models from the Unity 3d asset store, so I can compare lighting! Just had to hook up the textures in my JSON based materials. It really shows how much I need to implement IBL and reflection comparing output. I've been thinking about copying the Witcher 3 idea of a simple low-resolution cubemap camera that is indoor/outdoor aware for a fully dynamic probe as all my stuff is randomly generated you can't bake it unless you save seeds.<br />
<br />
Working on procedural animation and an all new animation state system currently, so no pretty lighting for a while. Just using a simple 'skylight' hack in the meantime. BTW the FbxSdk for Linux works pretty well, which is nice as I didn't have to make a reverse engineered importer just for this.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhYulWTHGZbQ4ybEG1UNYm4UaXvQszSYHCM21JirTHXL4svE0Es2JC_CmKQ38pu66LVaDxFX4lxVA2_3Oh9_ENSzZiaXdudEu10DUC67HA-vOTAUeSGKv7i7QIE8k5IiIY6UO-4TTKYznA/s1600/kagura-0.15.0-20160107-130007-0000.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="180" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhYulWTHGZbQ4ybEG1UNYm4UaXvQszSYHCM21JirTHXL4svE0Es2JC_CmKQ38pu66LVaDxFX4lxVA2_3Oh9_ENSzZiaXdudEu10DUC67HA-vOTAUeSGKv7i7QIE8k5IiIY6UO-4TTKYznA/s320/kagura-0.15.0-20160107-130007-0000.png" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjGKWkoIsjqRAp5m1nSY-SGjYRspZ7qmxamofILZM2yMYr-KpXPA2va3h9gzKaNubosroX52usj4SUH5M-woE4PrajqekHf5CZVFobqHheAyYixssbOrgmKCrh2x2O-3pJ5DDkZoe3uVkw/s1600/kagura-0.15.0-20160106-233635-0000.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="180" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjGKWkoIsjqRAp5m1nSY-SGjYRspZ7qmxamofILZM2yMYr-KpXPA2va3h9gzKaNubosroX52usj4SUH5M-woE4PrajqekHf5CZVFobqHheAyYixssbOrgmKCrh2x2O-3pJ5DDkZoe3uVkw/s320/kagura-0.15.0-20160106-233635-0000.png" width="320" /></a></div>
<br />
Note all these are using faked IBL without AO and no shadows to see the difference better. I'm not saying the implementations are 100% either. :D<br />
<br />
Here's what it looks like with a Beckman Specular BRDF, and minor GBuffer shader tweaks -- similar to the Order 1886:<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj-OCHUTKif4-r4c7Rr4qdz7MvJ2QYoRjB3CPP-7NokOskFYFzZYJBTPjr6T6qrbW2BD8E-fUGx87S233fUMdD6cADktQbJw8OJNJbKbblJqrZqSjbTbIlSR7vHPsUSFPmNxoJxkFQwT84/s1600/kagura-0.15.0-20160107-115747-0000.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="180" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj-OCHUTKif4-r4c7Rr4qdz7MvJ2QYoRjB3CPP-7NokOskFYFzZYJBTPjr6T6qrbW2BD8E-fUGx87S233fUMdD6cADktQbJw8OJNJbKbblJqrZqSjbTbIlSR7vHPsUSFPmNxoJxkFQwT84/s320/kagura-0.15.0-20160107-115747-0000.png" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjDOrxW5iytG93Sd6fIxLiWErODtK8GMPMq3_SumCrLzhXAAmOvlIVUboxdyIRZZH04V8JwIUltRDzA6MoNXxlMtBvhAvtJNuZ9NzQhzjvM2PG6WdlOIQbBItiizx4Q_H3Hqhel83I4uZ8/s1600/kagura-0.15.0-20160107-122548-0000.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="180" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjDOrxW5iytG93Sd6fIxLiWErODtK8GMPMq3_SumCrLzhXAAmOvlIVUboxdyIRZZH04V8JwIUltRDzA6MoNXxlMtBvhAvtJNuZ9NzQhzjvM2PG6WdlOIQbBItiizx4Q_H3Hqhel83I4uZ8/s320/kagura-0.15.0-20160107-122548-0000.png" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<br />
Burley aka "Disney" -- similar to UE4:<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgDQMZ0bhEYmoSz-bmKSnTaFbvGjjNaKiwu4m-0mRWTWXTxpfhzNjrq8Ouv-tJmzMgIN3MNAEW2yKyG1fe4pHg5sE-5ALPQ2A8UDi0332EgehGQSHN__CwWFtVkOy6TAd03amo9Q2Gev3k/s1600/kagura-0.15.0-20160107-120846-0000.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="180" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgDQMZ0bhEYmoSz-bmKSnTaFbvGjjNaKiwu4m-0mRWTWXTxpfhzNjrq8Ouv-tJmzMgIN3MNAEW2yKyG1fe4pHg5sE-5ALPQ2A8UDi0332EgehGQSHN__CwWFtVkOy6TAd03amo9Q2Gev3k/s320/kagura-0.15.0-20160107-120846-0000.png" width="320" /></a></div>
<br />
<br />
"Kagura Default" which is a GGX + Normalized Oren-Nayar -- similar to Deep-Down reveal:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEitnIc61Qc_CVavINJ0HAKMPqilJ3rmvObN4hqzGWDiYyE1xfz46tDdGmiVnlVRUO0OPaF4Um1x8L4PesgTZV-gauV0Sj8XOvlfczxYHNFboM_GbAlCqaM1bAlGwwFqnfa9ZogcM5o8HKs/s1600/kagura-0.15.0-20160107-120900-0000.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="180" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEitnIc61Qc_CVavINJ0HAKMPqilJ3rmvObN4hqzGWDiYyE1xfz46tDdGmiVnlVRUO0OPaF4Um1x8L4PesgTZV-gauV0Sj8XOvlfczxYHNFboM_GbAlCqaM1bAlGwwFqnfa9ZogcM5o8HKs/s320/kagura-0.15.0-20160107-120900-0000.png" width="320" /></a></div>
<br />
<br />
Beckman + Oren-Nayar vs GGX + Oren-Nayar with paused camera ( for use with photoshop )<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhm8Oo-CaGMkrT08eO1iYBMj1F6exfAunRCc6aBpPVK6SD1ZBUp_M5srPGQvNSvSeWqKkC_B-6Olia7_BKitXG4OfYmxVPBX1Ft1n2QFHjbOXZ0K4W2ClEps_EkQM2Il-QIpjQH5Qatj9E/s1600/kagura-0.15.0-20160107-124322-0000.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="180" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhm8Oo-CaGMkrT08eO1iYBMj1F6exfAunRCc6aBpPVK6SD1ZBUp_M5srPGQvNSvSeWqKkC_B-6Olia7_BKitXG4OfYmxVPBX1Ft1n2QFHjbOXZ0K4W2ClEps_EkQM2Il-QIpjQH5Qatj9E/s320/kagura-0.15.0-20160107-124322-0000.png" width="320" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgB1imhDj8c7pPDmjxYDmiVjHyfP8jiJfVN7NRRVAtZjEfNFhyphenhyphenHoiCvJFsRCuxRE-1N2AjIkjRl1xjdEhVetsiqp5h57KxLFfeSN8GDURaRzt7TrXtW-oIeGZKgfWNQVmc1Oxq3MT3BLkE/s1600/kagura-0.15.0-20160107-124340-0000.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="180" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgB1imhDj8c7pPDmjxYDmiVjHyfP8jiJfVN7NRRVAtZjEfNFhyphenhyphenHoiCvJFsRCuxRE-1N2AjIkjRl1xjdEhVetsiqp5h57KxLFfeSN8GDURaRzt7TrXtW-oIeGZKgfWNQVmc1Oxq3MT3BLkE/s320/kagura-0.15.0-20160107-124340-0000.png" width="320" /></a></div>
<br />
<br />Terry Hendrix IIhttp://www.blogger.com/profile/03721894942984178169noreply@blogger.com0tag:blogger.com,1999:blog-8917826814243381730.post-52753828917326680652016-01-02T12:07:00.004-05:002016-01-03T23:41:20.271-05:00Nah... let's fix bugs first.<div class="separator" style="clear: both; text-align: left;">
Update, fixed some materials on the horse after some more lighting work... of course:</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi4UVN6Oq05uvZNhnoKVu9KRzQYmtGhPpsIyDe-XZvriitaq0cA2IrhPrjzkWhh6JKrY9SPbf80q-T49AQTP9K4NNGgEhTutrpRrc6gJXU35P0EcqstF8QzsdrjVPXsuNNnV4SUOdEpkm0/s1600/kagura-0.15.0-20160103-233819-0000.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="180" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi4UVN6Oq05uvZNhnoKVu9KRzQYmtGhPpsIyDe-XZvriitaq0cA2IrhPrjzkWhh6JKrY9SPbf80q-T49AQTP9K4NNGgEhTutrpRrc6gJXU35P0EcqstF8QzsdrjVPXsuNNnV4SUOdEpkm0/s320/kagura-0.15.0-20160103-233819-0000.png" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
It helps when more systems match the same coord system and lighting direction...</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhfQiUm-nmkkAys-IgHK5r7AiUq3vhBpTx2abuhmdu1Ka_nGlH0yZqo4wU8EOzwqlJYkOi70bDvjqxGnjK99mlsGosDv_VyYCB-ssUD0XECoBAo6kWNzNlOGwlt2DljIFGPgI5hZqEMxX4/s1600/kagura-0.15.0-20160102-115135-0000.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="180" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhfQiUm-nmkkAys-IgHK5r7AiUq3vhBpTx2abuhmdu1Ka_nGlH0yZqo4wU8EOzwqlJYkOi70bDvjqxGnjK99mlsGosDv_VyYCB-ssUD0XECoBAo6kWNzNlOGwlt2DljIFGPgI5hZqEMxX4/s320/kagura-0.15.0-20160102-115135-0000.png" width="320" /></a></div>
<br />
I can see my house from here... if you look close you can see a 3px tall horse...<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjG5NU52PeWcFq186__HoElJT-WIQBKeymUfAgXco-poNd9bc3MYyqXNvdCJYCrrcwCi9CpH-iXkgUKysws3t4JvMuBAd-gDHYr51TkmyyWakj1lfCesNdifJNRj9VEokCXSziisnbSA-0/s1600/kagura-0.15.0-20160102-120321-0000.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="180" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjG5NU52PeWcFq186__HoElJT-WIQBKeymUfAgXco-poNd9bc3MYyqXNvdCJYCrrcwCi9CpH-iXkgUKysws3t4JvMuBAd-gDHYr51TkmyyWakj1lfCesNdifJNRj9VEokCXSziisnbSA-0/s320/kagura-0.15.0-20160102-120321-0000.png" width="320" /></a></div>
He looks like this...<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjkI8-ifTGU7sgykmnDceX9Zv18KUffMFFLzH2tgufQcw6D0CIXse2uJc5SnRNgcO0UtNH3o3jroInjcUE9zVwCDAT-LN-dJk2bhEosAeBsNBx1hn2RZt9SvhPDKTDORFhaceL-dSG6fI4/s1600/kagura-0.15.0-20160102-122222-0000.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="180" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjkI8-ifTGU7sgykmnDceX9Zv18KUffMFFLzH2tgufQcw6D0CIXse2uJc5SnRNgcO0UtNH3o3jroInjcUE9zVwCDAT-LN-dJk2bhEosAeBsNBx1hn2RZt9SvhPDKTDORFhaceL-dSG6fI4/s320/kagura-0.15.0-20160102-122222-0000.png" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh753sgyYiI6hLGm2CVwoYFuMrr1XfzcRSpcF801IxbIBmloTaModL6qbeB_EcAuhelvCkUZVs1BFEfThZLB6YcgPGhiuA-sdyXXUgw8c-hHTCi_3nxfQFNqa6o2418OH1frnnKEFX9sMk/s1600/kagura-0.15.0-20160102-123236-0000.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="180" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh753sgyYiI6hLGm2CVwoYFuMrr1XfzcRSpcF801IxbIBmloTaModL6qbeB_EcAuhelvCkUZVs1BFEfThZLB6YcgPGhiuA-sdyXXUgw8c-hHTCi_3nxfQFNqa6o2418OH1frnnKEFX9sMk/s320/kagura-0.15.0-20160102-123236-0000.png" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
Old asset test for fun...<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhTt1nYTlPwn5LZTiiODTXFKHQvfJxE3D1xrTuJDmWTOemlWMlW7sUm5ffPLHzE_6jpr9DhjBsKRVLPY4YHEkne_FNi4kdNbQjmTBJaYbLX9F-MS0-En1KAhd_nG5bOMJepbN51qRO_t7c/s1600/kagura-0.15.0-20160102-122821-0000.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="180" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhTt1nYTlPwn5LZTiiODTXFKHQvfJxE3D1xrTuJDmWTOemlWMlW7sUm5ffPLHzE_6jpr9DhjBsKRVLPY4YHEkne_FNi4kdNbQjmTBJaYbLX9F-MS0-En1KAhd_nG5bOMJepbN51qRO_t7c/s320/kagura-0.15.0-20160102-122821-0000.png" width="320" /></a></div>
<br />Terry Hendrix IIhttp://www.blogger.com/profile/03721894942984178169noreply@blogger.com0tag:blogger.com,1999:blog-8917826814243381730.post-67545054311376957452015-12-30T23:30:00.001-05:002015-12-30T23:54:38.864-05:00Hhhmm... needs geometry shaders!Finally going to break down and add some geometry shader instanced grass soon now I have the shader based fbm ( no texcoords! ) tweaked a bit for flora spawning / layout for testing. The other cool part will be that grass will be opaque now. I may add some faked transmittance to that as well. Then again playing with some procedural animation and IK might be more fun.<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjvCl13pjmnySs0sv7qWiEXyvtBvdzoeQnn_Ld0ttmb-DsjiRtwqas4Y2EV5N65YILh6x3MFqMx7AIaPDD0-lgYPJ8ApsfSWiG7FcEaVLg8T8hwZXG6p6jkysgsmmw4VWF8fOdn1TtYF5Y/s1600/kagura-0.15.0-20151230-235342-0000.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="180" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjvCl13pjmnySs0sv7qWiEXyvtBvdzoeQnn_Ld0ttmb-DsjiRtwqas4Y2EV5N65YILh6x3MFqMx7AIaPDD0-lgYPJ8ApsfSWiG7FcEaVLg8T8hwZXG6p6jkysgsmmw4VWF8fOdn1TtYF5Y/s320/kagura-0.15.0-20151230-235342-0000.png" width="320" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
Terry Hendrix IIhttp://www.blogger.com/profile/03721894942984178169noreply@blogger.com0tag:blogger.com,1999:blog-8917826814243381730.post-66647476679025010042015-12-27T00:30:00.001-05:002015-12-27T21:38:35.911-05:00Screenshot Weekend<div class="separator" style="clear: both; text-align: center;">
Well, mostly focused on non-renderer stuff this weekend like bringing more of the web editor interface into in-game viewport UI. A few minor improvements to sky with a simple per fragment Preetham, and ported all my shaders to the updated Kagura shader lang to get ready for Vulkan. </div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEilUrEVYWLLssCOx8LbpOqwBrFDf0ngPT_gmc6L9VtiIivBovSDgEwEXfeHBm5_aOBZWFm9gSRRP-FG5p9uUDA6EtSFSf24KpWc5TIzbakoIv8zjrbIPxdzqmJ9HoPGLZ9bPocWpiPb8_4/s1600/kagura-0.15.0-20151227-002612-0000.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="180" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEilUrEVYWLLssCOx8LbpOqwBrFDf0ngPT_gmc6L9VtiIivBovSDgEwEXfeHBm5_aOBZWFm9gSRRP-FG5p9uUDA6EtSFSf24KpWc5TIzbakoIv8zjrbIPxdzqmJ9HoPGLZ9bPocWpiPb8_4/s320/kagura-0.15.0-20151227-002612-0000.png" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="float: left; text-align: left;">
Same scene -- different foliage seed -- with some general lighting improvements:</div>
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiSZvQOZ4uZH-E8bhWSAIt74DtuZ-t1TAcic7IZqRuvIWDm2Syg7y2T4stEQautm-X0q0i_MPGKmZXcpgv4nQx3gpl4PcnOhyphenhyphenCxdK4Js5n900TAAgmXynh_UF6RDHkgeLRDpNiMzcIpsiE/s1600/kagura-0.15.0-20151227-212851-0000.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="180" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiSZvQOZ4uZH-E8bhWSAIt74DtuZ-t1TAcic7IZqRuvIWDm2Syg7y2T4stEQautm-X0q0i_MPGKmZXcpgv4nQx3gpl4PcnOhyphenhyphenCxdK4Js5n900TAAgmXynh_UF6RDHkgeLRDpNiMzcIpsiE/s320/kagura-0.15.0-20151227-212851-0000.png" width="320" /></a><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgULa5BQ9gQyGze_5y3WzVtKJV1GmYS0X6Ev8AgdpPvJKrcKUY7yKimjlCPATyT9MdCHw0O_zdSXlzzxaT8g7uhBGDhwra6BUCnNYush2ZZnaTiio472hyphenhyphencOHtZIP1ixFq3patw2d_s1fE/s1600/kagura-0.15.0-20151227-211937-0000.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="180" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgULa5BQ9gQyGze_5y3WzVtKJV1GmYS0X6Ev8AgdpPvJKrcKUY7yKimjlCPATyT9MdCHw0O_zdSXlzzxaT8g7uhBGDhwra6BUCnNYush2ZZnaTiio472hyphenhyphencOHtZIP1ixFq3patw2d_s1fE/s320/kagura-0.15.0-20151227-211937-0000.png" width="320" /></a><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh79PgZPbewu95JphlvrPfhf3sT6xfe0AvdALOADmdBeMwTsxBruuKoFK0rwxFNxA_CWMvMVhD5wmnZJyHMzt1aVlbKIkEhnLr0jlQfk_YGoZk337p0rYd72NCQNU55iy4t-XeM3Y0UbIg/s1600/kagura-0.15.0-20151227-142221-0000.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="180" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh79PgZPbewu95JphlvrPfhf3sT6xfe0AvdALOADmdBeMwTsxBruuKoFK0rwxFNxA_CWMvMVhD5wmnZJyHMzt1aVlbKIkEhnLr0jlQfk_YGoZk337p0rYd72NCQNU55iy4t-XeM3Y0UbIg/s320/kagura-0.15.0-20151227-142221-0000.png" width="320" /></a>
<br />
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div bp.blogspot.com="" esoucprs="" http:="" imageanchor="1" jzujhely="" kagura-0.15.0-20151227-142221-0000.png="" oa6pqvd9xi="" s1600="" style="float: left; margin-bottom: 1em; margin-right: 1em;" vs="">
</div>
<div bp.blogspot.com="" gyqmdjq="" http:="" hv0vc1fqog="" imageanchor="1" kagura-0.15.0-20151227-211937-0000.png="" occydb6awi="" s1600="" style="float: left; margin-bottom: 1em; margin-right: 1em;" wa="">
</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<br />
<br />
Below is a simple test for tiling fbm independently for foliage generation with the threaded voxel sectors, so there is no need to do another physics based ray cast pass. Each pixel is 0.5m^2 per sector here. Basically this is using a multi-level frequency hierarchy to generate the foliage overlays independent of other tiles, yet still match up. I might try to expand this to 3d vol tiles for things like clouds for proc sky + ray marching later.<br />
<br />
<pre> <span style="font-weight: bold;"><span style="color: black;">KaNoiseFractalBrownianMotion2d</span></span><span style="color: #990000;">(</span> octaves<span style="color: #990000;">,</span></pre>
<div class="content">
<pre><tt> <span style="color: #990000;">(</span>x <span style="color: #990000;">+</span> tx <span style="color: #990000;">*</span> <span style="color: #993399;">512</span><span style="color: #990000;">.</span>0f<span style="color: #990000;">)</span> <span style="color: #990000;">*</span> frequency<span style="color: #990000;">,</span>
<span style="color: #990000;">(</span>z <span style="color: #990000;">+</span> tz <span style="color: #990000;">*</span> <span style="color: #993399;">512</span><span style="color: #990000;">.</span>0f<span style="color: #990000;">)</span> <span style="color: #990000;">*</span> frequency<span style="color: #990000;">,</span>
amplitude<span style="color: #990000;">,</span> lacunarity<span style="color: #990000;">,</span> gain <span style="color: #990000;">);</span></tt></pre>
</div>
<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjdwp1MSrTf4e1TVRC4O86DZ3XPHHuXwWMfd51p8O9tRXggcNIR2LqDX7TKwC9v64fZPINtdapvigbn3UTSGqonbVKInnghQh8fXyrCguTwLRRS2GH16lLzjr5ac_ESYroENee1wj5F_ow/s1600/screenshot-area-2015-12-27-112646.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="111" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjdwp1MSrTf4e1TVRC4O86DZ3XPHHuXwWMfd51p8O9tRXggcNIR2LqDX7TKwC9v64fZPINtdapvigbn3UTSGqonbVKInnghQh8fXyrCguTwLRRS2GH16lLzjr5ac_ESYroENee1wj5F_ow/s320/screenshot-area-2015-12-27-112646.png" width="320" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgUOhUScHhs18F7VHr3Fv1lJ0lqvCVk2TIKi0blwl3osKArapIrOyymD1edR9TYfU_hHTyT1Tj0E3kvqa5lVWI9A-TYrEGKAhURd0X3buolAMfYEIFhUL28n0OppBLWFLfFJ_UGZoAFxMc/s1600/screenshot-area-2015-12-27-112700.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgUOhUScHhs18F7VHr3Fv1lJ0lqvCVk2TIKi0blwl3osKArapIrOyymD1edR9TYfU_hHTyT1Tj0E3kvqa5lVWI9A-TYrEGKAhURd0X3buolAMfYEIFhUL28n0OppBLWFLfFJ_UGZoAFxMc/s320/screenshot-area-2015-12-27-112700.png" width="305" /></a></div>
<br />Terry Hendrix IIhttp://www.blogger.com/profile/03721894942984178169noreply@blogger.com0tag:blogger.com,1999:blog-8917826814243381730.post-76094546009101945932015-12-17T00:23:00.003-05:002015-12-17T13:58:21.833-05:00Holiday screens cont<div class="separator" style="clear: both; text-align: center;">
</div>
<br />
Played around with some aerial perspective blocked out for forward / deferred, and a little LoD systems update. Also an old indirect lighting hack via bi-directional sun tossed in for good measure, which isn't a bad fallback when IBL data is not generated for a scene.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgMvubQqwvenOpRHv1N3oOlLgV1EQrsns_vKIsQ2lQ2CSfpG09myPTNhF7nGdqHvKMt0Yqn0d0SntO1KPXEFNCqWXeMAMOoGSb75DnMQsTb8j0kmumB4Vpersm4yxfA-lu_X9wfr7v28fc/s1600/kagura-0.15.0-0145.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="180" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgMvubQqwvenOpRHv1N3oOlLgV1EQrsns_vKIsQ2lQ2CSfpG09myPTNhF7nGdqHvKMt0Yqn0d0SntO1KPXEFNCqWXeMAMOoGSb75DnMQsTb8j0kmumB4Vpersm4yxfA-lu_X9wfr7v28fc/s320/kagura-0.15.0-0145.png" width="320" /></a></div>
<br />
<br />
<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgsxK6nEd4mu6P5_K0GSYKReSHFdgI-FWN2WFGnAXkWI2pJ4jBImPrK4UloVbvmVtQWKk_r7X7tjeiqqDh51en9awrH-WX-V-Ncd0RQtVmm6Cbw7R7Gt4jH2lO1wPCSzjl7SuD_sIB1_dg/s1600/kagura-0.15.0-0142.png" imageanchor="1" style="float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="112" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgsxK6nEd4mu6P5_K0GSYKReSHFdgI-FWN2WFGnAXkWI2pJ4jBImPrK4UloVbvmVtQWKk_r7X7tjeiqqDh51en9awrH-WX-V-Ncd0RQtVmm6Cbw7R7Gt4jH2lO1wPCSzjl7SuD_sIB1_dg/s200/kagura-0.15.0-0142.png" width="200" /></a>
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiwMGTrq4DO4tddfbKgfnzzKashBIouYkDegdLbTe32h89Hwlbry6crJIoxq8nU07_kccOs13jFJ4SZ_x74r1n8pRgyrrdNYqSthI7E4JZ8PXHJn-vC9jIZkig71xJirKO2nE-8sxG40rg/s1600/kagura-0.15.0-0144.png" imageanchor="1" style="float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="112" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiwMGTrq4DO4tddfbKgfnzzKashBIouYkDegdLbTe32h89Hwlbry6crJIoxq8nU07_kccOs13jFJ4SZ_x74r1n8pRgyrrdNYqSthI7E4JZ8PXHJn-vC9jIZkig71xJirKO2nE-8sxG40rg/s200/kagura-0.15.0-0144.png" width="200" /></a>
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEieGuVRNdPSubluYlU33BOjXZKcCZzgiPsl0Gtj6K189fMrpbVY_VmzZG2IDNDrnimBSpIysldA0sNTrvB-KGjh-YMupDUCi0Cbzqn32a5TbdOOx4BO6N24cN5hh6luAid68OnBYBcKY3s/s1600/kagura-0.15.0-0143.png" imageanchor="1" style="float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="112" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEieGuVRNdPSubluYlU33BOjXZKcCZzgiPsl0Gtj6K189fMrpbVY_VmzZG2IDNDrnimBSpIysldA0sNTrvB-KGjh-YMupDUCi0Cbzqn32a5TbdOOx4BO6N24cN5hh6luAid68OnBYBcKY3s/s200/kagura-0.15.0-0143.png" width="200" /></a>
<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjfLF4GOG6fIsPExwkeMo5vAiKjw5vuiixag2XYH2WLHnRuBSj1b_N5m6_IlsOC47uQ9Y0xXCY0so91G6GU7-3bc1k7EyeZStR1KllahtXzH_KkLg2NQJMmH3lzJEXWAnL53_isz7-hZ7M/s1600/kagura-0.15.0-0134.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="112" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjfLF4GOG6fIsPExwkeMo5vAiKjw5vuiixag2XYH2WLHnRuBSj1b_N5m6_IlsOC47uQ9Y0xXCY0so91G6GU7-3bc1k7EyeZStR1KllahtXzH_KkLg2NQJMmH3lzJEXWAnL53_isz7-hZ7M/s200/kagura-0.15.0-0134.png" width="200" /></a></div>
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgPch51FoM8NPpZPuvQRDq3crP-7oDD4tu5uX2ep-AKsUi6AYEeG_feq1H7bP0pDMRhE1ptM6aLHWLLu6NKS3vANgPwVmyZPLTlUuijAKDypWlyqYOwOGKVGzX-GJxb1S6mDIdJSMQPsk8/s1600/kagura-0.15.0-0136.png" imageanchor="1" style="display: inline !important; float: left; margin-bottom: 1em; margin-right: 1em; text-align: center;"><img border="0" height="112" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgPch51FoM8NPpZPuvQRDq3crP-7oDD4tu5uX2ep-AKsUi6AYEeG_feq1H7bP0pDMRhE1ptM6aLHWLLu6NKS3vANgPwVmyZPLTlUuijAKDypWlyqYOwOGKVGzX-GJxb1S6mDIdJSMQPsk8/s200/kagura-0.15.0-0136.png" width="200" /></a><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjYS4QrujCafOE4Sl9o7yNTCWXVM647AM8jmlnTfSuy1LxohH3fQOZ9x4bIhwV5Z6UXOiTgCQvEB10mv0x3_f2Yq_hKeT20RkMBlxEQfLRYcBF-wT6lHTrqDe9eaUu-eOfDhId_9dqIcJY/s1600/kagura-0.15.0-0135.png" imageanchor="1" style="float: left; margin-bottom: 1em; margin-right: 1em; text-align: center;"><img border="0" height="112" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjYS4QrujCafOE4Sl9o7yNTCWXVM647AM8jmlnTfSuy1LxohH3fQOZ9x4bIhwV5Z6UXOiTgCQvEB10mv0x3_f2Yq_hKeT20RkMBlxEQfLRYcBF-wT6lHTrqDe9eaUu-eOfDhId_9dqIcJY/s200/kagura-0.15.0-0135.png" width="200" /></a><br />
<br />Terry Hendrix IIhttp://www.blogger.com/profile/03721894942984178169noreply@blogger.com0tag:blogger.com,1999:blog-8917826814243381730.post-15201831693221379292015-12-14T13:52:00.001-05:002015-12-14T13:52:19.773-05:00A little screenshot<div class="separator" style="clear: both; text-align: left;">
Playing around a bit with the old engine voxel terrain with erosion and procedural foliage deco. Maybe something better to post next weekend.</div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiPY9KdU2gGnID1BLw5IEJxrgCPbsI9aRVFLutvz9-sFfk003gMUeJTGS6FQi1YLxlq2DQEporyhWuTewN78qDSDYLgZuYKoBi5NhA6IGw3orCyazKXzNCDLWUbALxN6u_LR-hN9rF_h6E/s1600/kagura-0.15.0-0104.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="225" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiPY9KdU2gGnID1BLw5IEJxrgCPbsI9aRVFLutvz9-sFfk003gMUeJTGS6FQi1YLxlq2DQEporyhWuTewN78qDSDYLgZuYKoBi5NhA6IGw3orCyazKXzNCDLWUbALxN6u_LR-hN9rF_h6E/s400/kagura-0.15.0-0104.png" width="400" /></a></div>
<br />Terry Hendrix IIhttp://www.blogger.com/profile/03721894942984178169noreply@blogger.com0tag:blogger.com,1999:blog-8917826814243381730.post-86482060630846216822015-09-27T12:29:00.002-05:002015-09-27T12:29:33.062-05:00Screenshot Sunday?I have been busy and had a bout of illness, so I haven't updated my blog in a while. Mostly I've been researching new procedural content systems and re-reading SIGGRAPH papers while reworking my TDD. Been looking into merging GPU clipmaps with the old 100% procedural voxel terrain system to allow easier content creation. Also a lot of other stuff not worth showing even as a WIP like proc sun/sky. Right now I'm going to focus on sun only tests for physically based light until approx phyiscal units for color temperature, intensity, et al are choosen. Also various materials are being reworked to be more correct via tweaking until this is stood up for comparison with PBLs.<br />
<br />
Right now my VR work on kagura is halted with the death of Linux SDKs for Occulus DK2. One of the reasons I'm starting this blog back up is I hope to get a Vive kit this year. In the meantime researching physically based lights and cameras along with other subsystems is a huge enough task. Physically based shading is great, but you end up hitting a brick wall without the other two -- I suggest reading SIGGRAPH 2015 The Order 1886 slidedecks, and "Moving Frostbite to PBS" is still one of the better introductions.<br />
<br />
Playing around with various light models and LoD again in the old mesh terrain test scene aka breaking things that used to work. You might notice no IBL, no SSR, and no shadows in these; however they're not even the same BRDFs in the same materials in these shots either. Easier to me to lower amount of variables.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgayYOJ-ptl0R7_01q92Jj2yhYdqclfV250QLHvxc3o48Dx-Axc-L4DJ7TULDbI-P5-B9wBUUzHz4aRwhRqJ1Mj8lJ25c2_sUmpYPnKVINqMPzwjvQcl9ZxQ_z3ffFXr-TKr8MOoHljp8k/s1600/kagura-0.15.0-0081.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="180" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgayYOJ-ptl0R7_01q92Jj2yhYdqclfV250QLHvxc3o48Dx-Axc-L4DJ7TULDbI-P5-B9wBUUzHz4aRwhRqJ1Mj8lJ25c2_sUmpYPnKVINqMPzwjvQcl9ZxQ_z3ffFXr-TKr8MOoHljp8k/s320/kagura-0.15.0-0081.png" width="320" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgqNuHm8dPpHQLwlKSDT4nXQX-9d1REyVPIG9lJhtDmsStCj8T4ZZNwdOS0gnuzWjQ-1IGy6ikXAMcOCeMSi0Q_B_umjCmn6dmu9SV44H7VWuOJ7n1-MyEjqQtvhvKjKNPbWWOKMtp2brY/s1600/kagura-0.15.0-0037.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="180" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgqNuHm8dPpHQLwlKSDT4nXQX-9d1REyVPIG9lJhtDmsStCj8T4ZZNwdOS0gnuzWjQ-1IGy6ikXAMcOCeMSi0Q_B_umjCmn6dmu9SV44H7VWuOJ7n1-MyEjqQtvhvKjKNPbWWOKMtp2brY/s320/kagura-0.15.0-0037.png" width="320" /></a></div>
<br />
<br />Terry Hendrix IIhttp://www.blogger.com/profile/03721894942984178169noreply@blogger.com0tag:blogger.com,1999:blog-8917826814243381730.post-89747542267393936972015-03-05T23:35:00.005-05:002015-03-05T23:35:57.926-05:00KaAllocator / KaTask Refactor Cont<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
Now my hand works again I decided to do a little bit of coding tonight on my new allocator system. Inspired by an old bitsquid blog post I decided to move to a full explicit allocator model, and reworked a ton of old subsystems ( like 2006 and older** ) to be more data-oriented as practice. </div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
Will soon be reworking the task management system to have easy dependencies. Right now 'jobs' -- which are really tasks or jobs -- have to be explicitly enqueued or synced internal to their work unit. This is because this code was written previous to modern task systems, which are now en vogue. Instead it focused on specialized threads with process affinity and a collection of generic 'worker' threads. Think render, game, io, general pool. For example the screenshot 'job' would enqueue itself to the explicit renderthread to grab a framebuffer into memory -- HMD FBO, camera render target, or framebuffer -- then hop over to an encoder step and then finally explicit IO thread queue to dump out to disk / http. What a pain. Moving to a flatter generic system that can sit in a single ringbuffer is much easier to manage and debug. A screenshot for systems code update blurb? Sure why not! Also cleaning up the embedded stats UI. I want to put some of this on github at some point, so more people will think 'correctly' about this issue in the future. :D</div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiQkUbsyFf-HdlvSLp6XKhssKecFnWly3O-DseuRpSG64Xo89jnD52wW9UKKQ8e-l8BYu0BburMpc1riSgZjQw3JjgXCn3eS2vh35BYmc4hLrVRx1QnQ3rgIvQcPpY1ICt13nnSf7nb75A/s1600/kagura-15.1.1-0186.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiQkUbsyFf-HdlvSLp6XKhssKecFnWly3O-DseuRpSG64Xo89jnD52wW9UKKQ8e-l8BYu0BburMpc1riSgZjQw3JjgXCn3eS2vh35BYmc4hLrVRx1QnQ3rgIvQcPpY1ICt13nnSf7nb75A/s1600/kagura-15.1.1-0186.png" height="225" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
** The oldest source code had emacs mode lines, and was from the 90s. :DTerry Hendrix IIhttp://www.blogger.com/profile/03721894942984178169noreply@blogger.com0tag:blogger.com,1999:blog-8917826814243381730.post-37863377366293253512015-02-17T00:05:00.001-05:002015-02-17T00:05:14.878-05:00Snow and suchWell, got to bang on the hobby project a bit during Monday. Mostly fixed particle emitters and some old rarely used timing code gearing up for the new curves based systems. All the particles look ugly still, so here's a skeleton sneak:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgxgumqUThtoLaSIRR7fbGB8xQR59VIWiG_bEfafTnZPI7SpBHssZN8AkkBEB0eIwOohRBmkipoLp6y9sfxvf_srKn4VUqAjJS9wzuLkOW836iPCBqEFIxQqNi0jdaaOffi549qM3w9Ax8/s1600/kagura-15.1.1-0183r.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgxgumqUThtoLaSIRR7fbGB8xQR59VIWiG_bEfafTnZPI7SpBHssZN8AkkBEB0eIwOohRBmkipoLp6y9sfxvf_srKn4VUqAjJS9wzuLkOW836iPCBqEFIxQqNi0jdaaOffi549qM3w9Ax8/s1600/kagura-15.1.1-0183r.png" height="180" width="320" /></a></div>
<br />Terry Hendrix IIhttp://www.blogger.com/profile/03721894942984178169noreply@blogger.com0tag:blogger.com,1999:blog-8917826814243381730.post-67290540228153199862015-02-12T01:21:00.001-05:002015-02-12T01:21:09.894-05:00Little tweaks here and there<div class="separator" style="clear: both; text-align: center;">
Mostly worked on Lua R&D, minor polish, and content clean-up in the little time I spent this week. Haven't had time to rig the new characters to demo the new animation system either. Will be dropping all the old content not from CC0 / CCBy sources, so I can do a public demo once that is ready. I also pruned a lot of the editor systems recently as I'm going to expand them with more in-game viewport editing support. Progress is slow, but if there are new HMDs on the market by the end of the year with SDKs I plan to ship something to show off Linux GameDev + VR. Yes, I am considering a VR specific editor mode too. You won't believe how easy it is to spot issues in a level in VR! :)</div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgsub_NSNPt8TlxO2gYoZ3yofq3C3NBQXesDhlN8wCeS_loevzTGGNGczcj0spHouUWnGM7pBbiqWfp_bR1LjLrsiL2tyT8naX4trNcA_Ol25KeY1JIvFuapl3FJdcy5SWVes12NsJcQyE/s1600/kagura-15.1.1-0181r.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgsub_NSNPt8TlxO2gYoZ3yofq3C3NBQXesDhlN8wCeS_loevzTGGNGczcj0spHouUWnGM7pBbiqWfp_bR1LjLrsiL2tyT8naX4trNcA_Ol25KeY1JIvFuapl3FJdcy5SWVes12NsJcQyE/s1600/kagura-15.1.1-0181r.png" height="225" width="400" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEitCFEAY49YajwkzMwx3CGJ6FXImr82-KnHsiS3xp-P-de1cVyAiz4qV6SHR35ezj9vOPzBzPr7UYKmYDvAFct_y-Ea8BbeSvNXwdSDu3l0rVzLf5ry4jl4vwEfPff7rqmyciK1cW6z6co/s1600/kagura-15.1.1-0179r.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEitCFEAY49YajwkzMwx3CGJ6FXImr82-KnHsiS3xp-P-de1cVyAiz4qV6SHR35ezj9vOPzBzPr7UYKmYDvAFct_y-Ea8BbeSvNXwdSDu3l0rVzLf5ry4jl4vwEfPff7rqmyciK1cW6z6co/s1600/kagura-15.1.1-0179r.png" height="225" width="400" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiYPAa46XDD6wRQJN5Xjj_u9E9Nh5W0UUYv3tCzVDeybjPw1qir93F3oXwZjq51YGQ9PLlCgNjLtELpXpkOBPhyIrlKH4yTC9Kh-UakbZ6YU_Jizsq0MswWkJTJJVVlWPtpJEnsGDuK-D0/s1600/kagura-15.1.1-0177r.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiYPAa46XDD6wRQJN5Xjj_u9E9Nh5W0UUYv3tCzVDeybjPw1qir93F3oXwZjq51YGQ9PLlCgNjLtELpXpkOBPhyIrlKH4yTC9Kh-UakbZ6YU_Jizsq0MswWkJTJJVVlWPtpJEnsGDuK-D0/s1600/kagura-15.1.1-0177r.png" height="225" width="400" /></a></div>
<br />Terry Hendrix IIhttp://www.blogger.com/profile/03721894942984178169noreply@blogger.com0tag:blogger.com,1999:blog-8917826814243381730.post-71933375760247423342015-02-06T00:40:00.001-05:002015-02-06T04:47:01.628-05:00Dat water<div class="separator" style="clear: both; text-align: center;">
Tweaked the basic tiled flow water shader and textures up a bit in between some other content fix up. </div>
<div class="separator" style="clear: both; text-align: center;">
In the middle of a brand new physically-based animation design / implementation that is also data oriented. Going for something pretty generic so curves can be used on everything from audiosource events, to UI, to of course IK blended skeleton animation. Keeping everything SoA and flat arrays outside the high level user facing stuff of course. Just something to do while doing some long work tasks over night I guess. Haven't worked on an animation library from scratch in some time!</div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhZxjdeHPY7ElMyXHoJizbsP_jzv6DHwEM4MS13xjhOZ9XAssLUGyc_CcbT7Y_mU6lBuhnGtn0f7rJu2eFylTuqdKPPNDMTiK3Gr0ZiZLRN791YhEBW6Rvn4IVYclopAe8ihxlQqIgWO44/s1600/kagura-15.1.1-0151.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhZxjdeHPY7ElMyXHoJizbsP_jzv6DHwEM4MS13xjhOZ9XAssLUGyc_CcbT7Y_mU6lBuhnGtn0f7rJu2eFylTuqdKPPNDMTiK3Gr0ZiZLRN791YhEBW6Rvn4IVYclopAe8ihxlQqIgWO44/s1600/kagura-15.1.1-0151.png" height="225" width="400" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiUEOcDBRwXPphmb3SaDqLozGmnDkmIDIYasd4iWm3AJgCSiVv49dLm3oiRaDLqTpfEHIY6udPQ9opJj_UAq6gk2SRD7kfl5JGH29gRAkYWN4zxRmAUEuX6aOnpVW3sycD7y7SJm_LcKUY/s1600/kagura-15.1.1-0152.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiUEOcDBRwXPphmb3SaDqLozGmnDkmIDIYasd4iWm3AJgCSiVv49dLm3oiRaDLqTpfEHIY6udPQ9opJj_UAq6gk2SRD7kfl5JGH29gRAkYWN4zxRmAUEuX6aOnpVW3sycD7y7SJm_LcKUY/s1600/kagura-15.1.1-0152.png" height="225" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiLcO7MpovgIADbJ7bZI2EWqJli2ebIrPE1TPfH-59CMjKzwO-tMv78xNLnCKdpptbL168rCzI8_PtvaANgQTw9Ps4MnKIljLgEHNHJinb6nB3sGA2Pta_EwrwdmxMvDdZtm355XGMi2jA/s1600/kagura-15.1.1-0153r.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiLcO7MpovgIADbJ7bZI2EWqJli2ebIrPE1TPfH-59CMjKzwO-tMv78xNLnCKdpptbL168rCzI8_PtvaANgQTw9Ps4MnKIljLgEHNHJinb6nB3sGA2Pta_EwrwdmxMvDdZtm355XGMi2jA/s1600/kagura-15.1.1-0153r.png" height="225" width="400" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjooaqTrsp4xVoR5rhg5uPmykARcgdH9kD_ueBpIQaW7cDHj8BoFF-q0Ue5xAkJLhppP2JHz5stImX-B88r2qOoSuX4dne9tKjGXFc-MLr9TD79k9HX8qQwctnQr30AXkhgdEP2F_fHmH4/s1600/kagura-15.1.1-0154r.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjooaqTrsp4xVoR5rhg5uPmykARcgdH9kD_ueBpIQaW7cDHj8BoFF-q0Ue5xAkJLhppP2JHz5stImX-B88r2qOoSuX4dne9tKjGXFc-MLr9TD79k9HX8qQwctnQr30AXkhgdEP2F_fHmH4/s1600/kagura-15.1.1-0154r.png" height="225" width="400" /></a></div>
<br />
Bonus, post power outage dirt + freckles + eyes material fun:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgjQUQ9weFdXA5wwuZdCaCNRbMPkW7tYlbON-YDujNtOG5f5KubQXIB6sM_vtkdnhdjB3GA-7EXyg2zmRKoa11mrQ5GU_FpI5Y27sv0Ij4RdIDjZJUhb_TLUeMQa3owkcyXTB_K5ZrbVJY/s1600/kagura-15.1.1-0166.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgjQUQ9weFdXA5wwuZdCaCNRbMPkW7tYlbON-YDujNtOG5f5KubQXIB6sM_vtkdnhdjB3GA-7EXyg2zmRKoa11mrQ5GU_FpI5Y27sv0Ij4RdIDjZJUhb_TLUeMQa3owkcyXTB_K5ZrbVJY/s1600/kagura-15.1.1-0166.png" height="225" width="400" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEia6LfA36v-RpVg3Cgk9zje7ORrkHTkFqp9UeaLf-GwHiAFTvfWDKOedi8rOvbvPqzqJWW5CfYbCP9T1fmAmyFFo9UctCnS0_MNNbA98XKxAXov0E04U7dlDDDNgDttagaBqC9jVclECfo/s1600/kagura-15.1.1-0167.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEia6LfA36v-RpVg3Cgk9zje7ORrkHTkFqp9UeaLf-GwHiAFTvfWDKOedi8rOvbvPqzqJWW5CfYbCP9T1fmAmyFFo9UctCnS0_MNNbA98XKxAXov0E04U7dlDDDNgDttagaBqC9jVclECfo/s1600/kagura-15.1.1-0167.png" height="225" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjXioLMgM1wTlo4Zo8t5k8GHgf89-78eLuDEIN3kC12xsEoRLjRwcxSkpYK9gh9oGfRN5WV4uK686AUUKs-OeLpZ4Ix_2f2TwP3O6lZ_g1FpOOtfagVGH9aKs54AEbsEdrhG6edmiiMxAo/s1600/kagura-15.1.1-0170.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjXioLMgM1wTlo4Zo8t5k8GHgf89-78eLuDEIN3kC12xsEoRLjRwcxSkpYK9gh9oGfRN5WV4uK686AUUKs-OeLpZ4Ix_2f2TwP3O6lZ_g1FpOOtfagVGH9aKs54AEbsEdrhG6edmiiMxAo/s1600/kagura-15.1.1-0170.png" height="225" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
Terry Hendrix IIhttp://www.blogger.com/profile/03721894942984178169noreply@blogger.com0tag:blogger.com,1999:blog-8917826814243381730.post-77753281863267893792015-02-04T00:17:00.001-05:002015-02-04T00:29:37.948-05:00Got 30mins in todayPlayed around with view weapons and such. Awkward skeleton feels uncomfortable.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgGbx52PxLYUdPuYFdXBvJ6GRSes9s0rT5sH1J6E6yxgpPRXEDkvnN3X9txXVoCac_iG4ciUIlYyRtsE6MPwDxF-cjlsNgK6f5odNier_sRYp32IThk6RqUU13qoW5xZnbCagWXY9-NxVw/s1600/kagura-15.1.1-0143r.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgGbx52PxLYUdPuYFdXBvJ6GRSes9s0rT5sH1J6E6yxgpPRXEDkvnN3X9txXVoCac_iG4ciUIlYyRtsE6MPwDxF-cjlsNgK6f5odNier_sRYp32IThk6RqUU13qoW5xZnbCagWXY9-NxVw/s1600/kagura-15.1.1-0143r.png" height="180" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi-cMW6jTuzQVkq568YkX18HYvbz-Z0RGvaB2oelT6_IBoVEyQRx1n3ovbxk-w2mSij_Sae3FB20b9u6QzplMUdsH1KinXSp0ClDNz2oPgiorn63ctfGU_82rA5btilDUEMdrGtPzutnRw/s1600/kagura-15.1.1-0146r.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi-cMW6jTuzQVkq568YkX18HYvbz-Z0RGvaB2oelT6_IBoVEyQRx1n3ovbxk-w2mSij_Sae3FB20b9u6QzplMUdsH1KinXSp0ClDNz2oPgiorn63ctfGU_82rA5btilDUEMdrGtPzutnRw/s1600/kagura-15.1.1-0146r.png" height="180" width="320" /></a></div>
<br />Terry Hendrix IIhttp://www.blogger.com/profile/03721894942984178169noreply@blogger.com0tag:blogger.com,1999:blog-8917826814243381730.post-64409467351267933822015-02-02T00:14:00.001-05:002015-02-02T00:14:10.276-05:00Ground work for grasping demo done<div class="separator" style="clear: both; text-align: center;">
Got some assets and their physics setup while playing around with new light models and materials on previous content. The best part is now if you try and stick your head into stuff you effectively get IK that will push the camera back in the game in a natural way. It kind of feels like sliding your head down the wall when you try to peek through it. Will likely do some proc animated enemies with a quick homemade ragdoll system next week if I get any free time. Everyone loves ragdolls and physics fun. Sword play, archery, and a little magic are still the goals for the public demo. If you have a DK2, some move controllers, and are a Linux developer that wants to test stay in touch over the next couple of months. Yeah hobby project. Also looking into getting networked game sessions working again on a related note. Coop VR RPG, anyone? I'm looking for more CC0 and CCBy content I can modify for the demo too if you see any! :)</div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg3lDTkG3UYobmneiwL3De_tRz0LkfVGj1uRZTpLmEEpS-BiuwX6ZZttopyFz6KfUKqVJ_ZJkOPW33ayTYIAmwAZwM2UAt90RB7ics0ObwhpinDR2ICjDkpmrNOtTrRZ7GnKpWoP4S4Ep8/s1600/kagura-15.1.1-0131r.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg3lDTkG3UYobmneiwL3De_tRz0LkfVGj1uRZTpLmEEpS-BiuwX6ZZttopyFz6KfUKqVJ_ZJkOPW33ayTYIAmwAZwM2UAt90RB7ics0ObwhpinDR2ICjDkpmrNOtTrRZ7GnKpWoP4S4Ep8/s1600/kagura-15.1.1-0131r.png" height="225" width="400" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhAR2yIbPKuj3x-RGeqM1Q0_LHZ5TH9GZN1TUOj2NjqVL6Z5VN3XBwZyV9HfohKzj9W7vAdNtzXBKhb8PlH1n-lNNeEGqeVuL4ZJ43bH7GFOuu4FIJBC2uQsrxaTFm5-GiR9LYhwUZtkwc/s1600/kagura-15.1.1-0133r.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhAR2yIbPKuj3x-RGeqM1Q0_LHZ5TH9GZN1TUOj2NjqVL6Z5VN3XBwZyV9HfohKzj9W7vAdNtzXBKhb8PlH1n-lNNeEGqeVuL4ZJ43bH7GFOuu4FIJBC2uQsrxaTFm5-GiR9LYhwUZtkwc/s1600/kagura-15.1.1-0133r.png" height="225" width="400" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjkiZBZ-ptFxFBcoQKQwrqHwSKcZ1zSIK9ZEdTgRyVE24sk9ehYEm_l2vFFRPH-TEdehfulXyCFap2l2ldpk4Z2L5D5k-jfxLzL3rIYiNOCpJhDx1w6Mh5y-hBJ-xTO09YYp7FZOwrjI_U/s1600/kagura-15.1.1-0134r.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjkiZBZ-ptFxFBcoQKQwrqHwSKcZ1zSIK9ZEdTgRyVE24sk9ehYEm_l2vFFRPH-TEdehfulXyCFap2l2ldpk4Z2L5D5k-jfxLzL3rIYiNOCpJhDx1w6Mh5y-hBJ-xTO09YYp7FZOwrjI_U/s1600/kagura-15.1.1-0134r.png" height="225" width="400" /></a></div>
<br />Terry Hendrix IIhttp://www.blogger.com/profile/03721894942984178169noreply@blogger.com0