Shop Mobile More Submit  Join Login
Hologram by killall-q Hologram by killall-q
Renders 3D models as point clouds.

Sample album


 Scale, rotate, and apply perspective to model
 Optional auto-rotation
• Optional edge interpolation renders edges as points
 Automatically fits and centers model
 Uses no CPU while not being interacted with
 Supports .obj files
• Provides self-calibrating load time estimates

Explanation of 3D rendering algorithm


 Scroll to zoom.
 Scroll over or click arrows to adjust pitch/roll/yaw. Middle-click to reset to 0.
• Click cog or middle-click for settings.

Warning: It is recommended to turn off auto-rotation before loading a complex model.

See Also

HoloFFT - audio visualizer


Q: Loading a model froze Rainmeter.

A: Depending on the complexity of the model, it may take several minutes to load, during which Rainmeter will appear to be frozen. Rainmeter will be fully responsive after loading is complete.

To interrupt a load in progress, run "Documents\Rainmeter\Skins\Hologram\<at>Resources\ForceKill.bat"

Q: What makes loading so time consuming?

A: Mostly the necessity for Rainmeter to instantiate thousands of meters for all the vertices in RAM. This stage has a big-O complexity of O(n^2), which is classified as "horrible". This is not something I can fix without delving into and altering the Rainmeter source code. Testing details and whining here.

Looking for 3D models to try? Thingiverse has a wide variety. Files will need to be converted to .obj format, either online or using Windows 8/10's 3D Builder app. You can use MeshLab to decimate (reduce) or subdivide (increase) the vertices of models.

Model credit: Photogrammetry Scan of Antonius Pius
113818 vertices
Loaded in 11 min 37 sec on an i5-6600K @ 3.5 GHz


- Added force kill batch file.

- Updated interface for parity with HoloFFT.

- Added left/right scroll anywhere to adjust yaw.
- Added middle mouse click to toggle settings.

- Added 3rd axis of rotation: roll.
- Stabilized calibration of load time estimation algorithm.

- Now gives "invalid file" error if selected file contains no vertices.

- Added adjustable perspective.
- Added adjustable edge interpolation - uses additional points to render lines.
- Eliminated load time when loading a model with fewer points than are currently loaded.
- Added point preloading - load once, and don't experience load times again until loading a more complex model or using high edge interpolation settings.
- All actions that require reloading will prompt for confirmation.
- Point count is now displayed alongside load time estimate.
- Now prints model point count to log.

- Added self-calibrating algorithm to estimate load times. Estimates may be inaccurate if calibrated on very small files.
- File load now scans file and provides a load time estimate, then prompts for load confirmation.
- Now prints load time to log.

- Optimized rendering by precalculating sin/cos ψ/θ.
- Fixed custom color not taking effect after refresh.
- Fixed bug where setting file or color to blank would make their settings fields unclickable.
Add a Comment:
dulspekilegur Featured By Owner Mar 7, 2017
also I know you answered this question below but I have no idea how to code exactly, can you send me a .lua with all the presets made so that it pulses with music as well because when I added the code the model completely disappeared 
dulspekilegur Featured By Owner Mar 7, 2017
Having trouble loading a model that's not even as complex as the one above, it's not really doing anything and it's frozen and the load time said it was going to take 11 hours, am I doing something wrong? 
killall-q Featured By Owner Edited Mar 8, 2017  Hobbyist Interface Designer
Looks can be deceiving when judging a model's complexity. It may be composed of subtle, high-poly curves or have unoptimized, high-poly edges. This is especially true of models created by laser or photogrammetry scans that have not been refined by hand.

File size is a better metric for .obj files, which contain only vertex and face data. The model file for the above picture, Antonius Pius, is 8 MB, and takes 11 min to load on an unthrottled desktop CPU. A file twice the size will take about 4 times longer to load (load time has a square relationship to number of vertices).

Loading time is also greatly dependent on your CPU's single-threaded performance. Laptops may automatically downclock themselves when on battery power, or be thermally throttled for safety even when plugged in. This won't be reflected in the load time estimate until you've loaded a several models to completion to calibrate the estimation algorithm.
korlimak Featured By Owner Feb 17, 2017
is there any way to use the program to load a file and save it as a preloaded state?  that way after you save a couple autorotation enabled files it wont need to reload the model.

How could i change the scale of the background box and the object model while still keeping it centered?  So far nothing i've done in the lua code has been able to keep it centered. 
killall-q Featured By Owner Edited Feb 27, 2017  Hobbyist Interface Designer
The time-consuming part of loading is for Rainmeter to create thousands of meters in RAM. So that would require saving Rainmeter's allocated RAM to disk, like what hibernation does. Turning autorotation on/off requires a refresh because the update interval is being changed.

To keep the model centered, make this modification to Hologram.lua:
function Scale(n)
       SKIN:Bang('[!Move (#CURRENTCONFIGX#-'..n..') (#CURRENTCONFIGY#-'..n..')][!MoveMeter...
(Add the bolded code in between existing code.)
Holocore Featured By Owner Edited Feb 10, 2017
This is seriously impressive man. I have two questions:

1. I am using some spaceship models as music visualizers, and they spin around their long (Z) axis. I'd like them to spin along their Y axis instead, as if I had set them on a rotating pedestal. How would I have to change the Update() function to swap the axis of rotation like that? It should just be a couple of coordinate replacements in the for loop right? I'll mess with it later but no guarantees.

EDIT: To anybody else trying to do the same thing, open Hologram.lua and change line 112 from:

local x, y, z = ...


local x, z, y = ...

which flips the coordinate systems when the model loads. 

2. How do I verify that edge interpolation is still running instead of crashed? I can't get any level of edge interpolation to render, no matter how simple the model, with or without your audio scaling modification. If I select edge interpolation and click load (estimated load time: 1min 22sec) rainmeter freezes for a minute like it's thinking, the translucent grey box that frames the pointcloud turns into a solid black box, and then a minute later other rainmeter modules start working again, but the hologram is not visible anywhere even though rainmeter manager still gives you the option to unload it. At first I thought I would just have to wait, but even after 20 minutes on an i5-6500 a simple, 1200 vertex mesh doesn't show up. How do I check if it just needs more time?
killall-q Featured By Owner Edited Feb 11, 2017  Hobbyist Interface Designer
If Rainmeter is responsive, loading has finished. You can verify that in the log (right-click Rainmeter system tray icon > About) if you see a message like, "Hologram: loaded 7573 points in 00:00:03.214"

If you cannot see the render, either:
1) the model file contains stray vertex(-ices) that are very far away, causing the auto-fitting/centering algorithm to render most of the model as a speck, or
2) you implemented the audio scaling modification such that FFTScale is 0 when music is not playing, or
3) a modification broke the skin.

Edge interpolation produces extra vertices that are treated no differently than the original vertices, and only takes a fraction of a second. It is not a "post-process" effect. The additional load time is due to the massive number of points generated that must be loaded by Rainmeter as thousands of meters.

Hologram will reject model files that lack readable vertex data. If your model is visible but edge interpolation has no effect, then your model may lack face data (it consists only of unconnected vertices).
ArtifexGroup Featured By Owner Jan 20, 2017  Professional General Artist
This is amazing thank you for this!
JA5ONBOURNE Featured By Owner Jan 11, 2017
It Doesn't work please help me set it up with a tutorial or something. Please I got some really cool 3D models.
Gile13 Featured By Owner Dec 11, 2016
Crazy stuff!!!+fav Clap Headbang! 
gammer1119 Featured By Owner Dec 2, 2016
Could someone just link some models? I can't find any good ones.
masked-soldier Featured By Owner Dec 1, 2016  Hobbyist General Artist
Is there a way to make the model pulse to the beat of music?
killall-q Featured By Owner Edited Dec 1, 2016  Hobbyist Interface Designer
What kind of ridiculous ques... actually, yes.

In Hologram.ini:
Measure= Plugin
(Add a new AudioLevel measure. Adjust parameters as desired.)

In Hologram.lua:
function Update()
   if true then
       moveFlag, psi = ...
       local sinTheta, cosTheta, sinPhi, cosPhi, sinPsi, cosPsi = ...
       local FFTScale = SKIN:GetMeasure('mFFT'):GetValue() * 0.8 + 0.2
       for i = 1, #coord.x do
           local zDepthScale = ...
           point[i]:SetX(... * xyScale * zDepthScale * FFTScale + dispR)
           point[i]:SetY(... * -xyScale * zDepthScale * FFTScale + dispR)
(Replace if statement conditions with true or remove if statement. Add FFTScale local variable.)

This will cause the model's scale to vary with audio. Rotation must be set to "ON" (actual rotation may be paused). Not recommended for use with complex models.
TotallyNotSam Featured By Owner Jan 24, 2017
I was looking to do this too, but what you suggested didn't work for me. When I add those lines and refresh the skin it doesn't load.
killall-q Featured By Owner Edited Jan 29, 2017  Hobbyist Interface Designer
It's not loading due to Lua compilation error.

Don't add the "* FFTScale" lines literally, the "..." means I excluded some code. Add that variable near the end of those lines. Text in bold is new code; other code is for context.
zorbak580 Featured By Owner Nov 10, 2016
I can't figure out how to change the hologram :/ Can someone do a tutorial or something?
killall-q Featured By Owner Nov 11, 2016  Hobbyist Interface Designer
Mouse over Hologram. Click the cog, then click on the path next to "FILE" to edit.
Paste in the path to your .obj file, and press Enter.
Click "LOAD" to the right of the estimated load time that pops up.
BobTheSlayer82 Featured By Owner Oct 19, 2016
how do i turn off auto rotation for my complex object? rainmeter crashes when i load the hologram.ini
killall-q Featured By Owner Oct 20, 2016  Hobbyist Interface Designer
Use "Documents\Rainmeter\Skins\Hologram\<at>Resources\ForceKill.bat" to unload the model without running Rainmeter.

Mouse over Hologram > click cog > rotation: off

It will may still take anywhere from seconds to minutes to load a model depending on how many vertices it has, but with auto rotation off, there won't be constant CPU usage after loading completes.
arianaxe Featured By Owner Sep 30, 2016  Hobbyist Traditional Artist
You download a .obj file from Thingiverse  place it into the file destination.
eliasu01 Featured By Owner Sep 22, 2016
where can I download different holograms?
killall-q Featured By Owner Sep 23, 2016  Hobbyist Interface Designer
Thingiverse has a lot of models that are not too high poly in a consistent file format, but you can use 3D models from anywhere as long as you convert them to .obj.
Sometimes, when I load a .obj file, it will end up as a small dot rather than a complete vector. Afterward, I can't access settings. Any way to fix this?
killall-q Featured By Owner Sep 15, 2016  Hobbyist Interface Designer
- What is your Rainmeter version?
- Does the model appear if you do a pitch/roll/yaw operation?
- When you can't access settings, is all of Rainmeter or just this skin frozen?

Any freeze/crash can be fixed by ForceKill.bat, which I added on 2016.09.12. Find it in Hologram's <at>Resources folder.
I'd also like to add, I use Meshlab to convert my models (mostly .stl) to .obj. That may have something to do with it, although the error usually occurs when 2x or 4x EI is enabled.
killall-q Featured By Owner Sep 16, 2016  Hobbyist Interface Designer
Do you have problems with loading the default model in <at>Resources\Models\Globe.obj?

When you load a file or change the edge interpolation setting, Hologram will post a message to the log on completion, like:

"Hologram: 7573 points"

Does this message appear and how many points did it detect? To access the log, click "Open log" on the bottom of Manage Rainmeter.

Please send me some sample problem files to killallq<at>gmail.
1. I've been using the 4.0 Beta release, will begin using the 3.3.2 stable release to check if that's the issue.
2. No, neither the settings window nor the operation features appear. Only a small dot appears, which is movable but not interact-able.
3. Rainmeter settings are usable, but the only way to control it is to re-install the program.

Thank you for the response, along with the tip. Great work!
beaux-restes Featured By Owner Aug 5, 2016  Hobbyist General Artist
Is it possible to use a jpg file that's converted to an obj format?
killall-q Featured By Owner Aug 12, 2016  Hobbyist Interface Designer
Yes, as long as it becomes a set of 3D coordinates. You may have to trace the outlines yourself or use an automatic tracing program.
Captain-Jesus8416 Featured By Owner Jul 24, 2016
Will you maybe make a version with wireframe?
malim20 Featured By Owner Apr 1, 2016
Works great but it takes so much CPU: ~15%. I have an i5 3230...
killall-q Featured By Owner Apr 1, 2016  Hobbyist Interface Designer
It will use zero CPU with auto-rotation off.
TheTushie Featured By Owner Edited Mar 1, 2016  Hobbyist Digital Artist
Had trouble changing the hologram, it kept saying invalid file. I did use .obj file 
killall-q Featured By Owner Mar 1, 2016  Hobbyist Interface Designer
Check the path you entered. It will load if the path is valid, regardless of what the file is.
hugopaz27 Featured By Owner Feb 28, 2016
Hi, great work. I just can't change the hologram. I have the .obj but i can't make them work. Can you help me?
killall-q Featured By Owner Feb 28, 2016  Hobbyist Interface Designer
Click the cog, click the file field, paste in the path to the .obj file, and press Enter. If it needs to load more points to display the model, it will give a time estimate (may be inaccurate if the last loaded file was very small). Click load.
GroudonMcL Featured By Owner Feb 27, 2016   General Artist
Yo! I really like this skin. Just started using rainmeter today. Was wondering if there is a way to rotate the  model. It keeps rotating on its side and if I change the view it just spins in a circle... Thanks!
killall-q Featured By Owner Feb 27, 2016  Hobbyist Interface Designer
It currently has yaw and pitch controls, I think you mean you want roll too? Sorry, I haven't quite wrapped my head around the math of adding a 3rd axis of rotation yet. You can correct the orientation of a model in 3D Builder or Tinkercad beforehand.
korlimak Featured By Owner Feb 17, 2017
Here's an easy way to think about 3d coordinate systems and maths:  use 2d slices.   xz-plane, yz-plane, xy- plane.  
In the xy-plane the equations are relative to the y (by convention).  
in the xz-plane the equations are very much similar to xy but use the z variable instead. 

in 3d:  you can essentially graft all of the 2d equation sets together to create the 3d one.  I assume you probably have but crack open a multivariate calc book and look over the 3d calculus,  you should be able to find the math you are looking for and derive your equations for   roll. 
GroudonMcL Featured By Owner Feb 28, 2016   General Artist
Thanks :)
butheresthetwist Featured By Owner Feb 26, 2016
Is there any way to make the grey box that pops up around it stop popping up or remain hidden?
killall-q Featured By Owner Feb 26, 2016  Hobbyist Interface Designer
You can make the grey box invisible while keeping mouseover controls:

In Hologram.ini:
MouseOverAction=[!ShowMeterGroup Control][!Redraw]
MouseLeaveAction=[!HideMeterGroup Control][!HideMeterGroup Set][!HideMeterGroup Est][!Redraw]
(Remove [!SetOption BG SolidColor ...][!UpdateMeter BG])

Or relegate controls display to a context menu (accessible by right-click):

In Hologram.ini:
ContextAction=[!ShowMeterGroup Control][!SetOption BG SolidColor 00000050][!UpdateMeter BG][!Redraw]
(Comment out MouseOverAction= )
SkySkyDizzle Featured By Owner Feb 15, 2016
Changing the model crashed and broke my rainmeter, naturally.
killall-q Featured By Owner Feb 15, 2016  Hobbyist Interface Designer
Rainmeter will be unresponsive while loading. If you keep trying to interact with Rainmeter, Windows will give you the option to force close Rainmeter as with any unresponsive program.

If you mistakenly loaded a complex model and you don't want to wait several minutes to use Rainmeter, you can kill Rainmeter, open Documents\Rainmeter\Skins\Hologram\resources\, and change File= to an invalid path.
Xeptar Featured By Owner Edited Mar 23, 2016
"If you mistakenly loaded a complex model and you don't want to wait several minutes to use Rainmeter. . ."

If I actually used a complex model and Rainmeter becomes unresponsive, will the model eventually load if I give it enough time or does it become fully unresponsive and won't load the model even if I wait? 
I went from using the Globe, which is only 190 kb, to a model that is 24,520 kb. Probably sounds like a bad idea, but wondered if it will work if given enough time and if it will stay loaded without waiting after starting the computer       again. Probably will have to settle for something really simple in Thingiverse, but just was curious seeing as you had that statue in the picture up there which seemed big

killall-q Featured By Owner Mar 23, 2016  Hobbyist Interface Designer
Every model will load, eventually. But load time is proportional to the square of the number of vertices; simply put, a model that has twice the vertices of another model will take about 4 times longer to load.

The largest file I've tried was 17.4 Mb, smaller than the one you're attempting, and it loaded in 52 minutes.

Once loaded, it won't have to load again until the skin is refreshed or RAM is cleared by logging off or restarting. Putting the computer to sleep is fine.

BTW, the above method is no longer the best way to interrupt loading. Just delete "Documents\Rainmeter\Skins\Hologram\<at>Resources\" and the partial load will finish instantly.
Agelyk Featured By Owner Feb 15, 2016  Student Digital Artist
great work mate :D
isuru4 Featured By Owner Feb 15, 2016
gnice :3
ptiboute Featured By Owner Feb 15, 2016
Very nice work Killal-q, thanks for the share :)
Add a Comment:


Submitted on
February 14, 2016
File Size
78.8 KB


41,714 (34 today)
102 (who?)
12,022 (9 today)


Creative Commons License
Some rights reserved. This work is licensed under a
Creative Commons Attribution-Noncommercial-Share Alike 3.0 License.