XaiJu
MacGruber_Laboratory

MacGruber_Laboratory

patreon


MacGruber_Laboratory posts

PostMagic v4

Small improvement for PostMagic due to a larger donation. See my Hub resources page.

View Post

Updates for Essentials and VirtualLock

New AudioReverb plugin has been added with Essentials.16. Also major update for VirtualLock (part of Connect.6). See my Hub resources page.

View Post

New Guide: Raspberry PI + Relay board

For Connect plugin. Check my Hub resources.

View Post

Life plugin WIP: Voice+Breathing

Short Hub profile blog post, plus looking for recommendations on AI voice services.

View Post

FYI: Switching page to non-adult

I have decided to switch my page to non-adult, as that is the option offered by Patreon to creators who do not want to do their age-verification. I simply don't agree with having my biometric data stored by a third-party in a fourth-party cloud storage. Therefore I deleted all old posts.

Clarification: New content will go directly on the Hub, simply skipping the EarlyAccess phase. Check my resource page there on occasion to not miss new resources, the Hub sadly doesn't send you notifications for those. Once in a while updates will be posted on my Hub profile page. This Patreon will keep running, so you can still tip for stuff you like as usual.

View Post

SpeechRecognition v3: Maintenance (free)

Quick maintenance update after last weeks v2 release.

Changelog

  • Fixed null reference exception that was apparently introduced due to an API change with VaM 1.21 or 1.22. This actually made the GrammarRecognizer unusable when the plugin was added to a new scene. Thx "Will" for reporting.
  • Fixed another silent null reference exception.
  • Updated demo scene to match new plugin version.

Download

View Post

LogicBricks v14: Sound from AssetBundles

LogicBricks is a collection of 34 reusable logic plugins to quickly build simple logic without coding. Version 14 adds the new SoundFromAB brick and other improvements around the topic of handling large amounts of sounds.

So, pick your favorite text-to-speech AI out there and have it generate your voices. Put them into an AssetBundle. Then enable VaM's new build-in lip-sync and use LogicBricks to play your voices. Having hundreds of voice lines in a scene isn't an issue anymore!

Changelog for LogicBricks v14

  • SoundFromAB: New brick that exposes audio files found in Unity AssetBundles to VaM's Trigger system. Folders inside the bundle will be exposed by two triggers each: PlaySpecific and PlayRandom. Each trigger includes the folder path in brackets. The first offers a drop-down menu with the audio files in that folder, while the other will play one audio file out of that folder at random. The benefit of this approach is that you do not need an individual brick for each sound or small random set of sounds you want to play. You just need one instance of this brick per AssetBundle and AudioSource. That finally allows managing hundreds of sounds in scene without long load times!
  • RandomSoundFromAB + RandomSound: Improvements for handling lots of files by adding "Add by Filter" and "Remove by Filter" buttons. These allow you to add/remove the current filter result (searchbox above) to/from the selection. Also there is now a "Remove ALL" button and I did some other UI rearrangements to create more space.
  • RandomSoundFromAB + RandomSound: Fixing issue with not playing audio sometimes when "Avoid Repetition" was disabled.
  • New demo scene with examples 29 and 30.

Download

  • This is an EarlyAccess release! Download will be available for free under CC BY-SA license a few days after 2023-03-28. You are allowed to reference this package in your own VAR packages, even if they are paid or use a different license. Links to my Patreon are always appreciated.
  • Beware of some browsers mistakenly renaming .var files to .zip when downloading from Patreon. More details on how to install VaM content and missing dependencies here.

View Post

"The New Remote" scene release (free on Hub)

Quick update for those still here after one year of nothing? I'm not "back", but just had a few days of free time and released a minor scene for free on the Hub:

In the last few days I also fixed the Benchmark plugin to make it work again with VaM 1.22.0.1 and made minor updates to the LogicBricks and Connect plugins in preparation for above scene release.

Cheers, MacGruber

View Post

Keeping the site online due to popular request.

Hi,

after the Goodbye post last week, I received lots of comments of appreciation. Thank you for those! My decision hasn't changed, I have stopped working on any VaM stuff. I will likely ignore questions, too. For the reasons stated in that post. Anyway, among them were surprisingly many comments asking to keep my site running, even though there wouldn't be any new content. I guess mostly from people who make creations based on my past work, some of them paid creators. Probably I be stupid to not accept free money, so I decided to keep it running for now ;) 

However, I want this to be your conscious choice, don't want to leech money from people who missed this post. Therefore I will send a direct message to everyone who currently still has an active subscription. Not everyone would be actively following my page after all. Almost 4 weeks should be enough time for everyone to find the PM and unsubscribe, if they want to. Afterwards I can still refund if needed, but I'd like to avoid that hassle.

Cheers, MacGruber

View Post

Goodbye!

Just to make that clear, this is not an early April's Fool post ;)

Some probably already suspected this after I had paused my Patreon for the last two months, I decided to stop my engagement in the VaM community for the foreseeable future.

But, ...why?

I was active in the VaM community more or less continuously for more than 4 years now. VaM has come a long way since then. Usually I spend something around 30-40 hours per month, some months up to 80 when I had some vacation. However, for the last year or so almost half of that time was just spend answering random questions. Quite often people don't even bother to send a "thx", let alone sub to my Patreon, after I spend like 30 or 60 minutes formulating an answer, sometimes even building things like example scenes or making screenshots for them. I tried to answer questions on the Hub, so at least others could profit from the time spent, but that didn't really work. The "best" ones are those who would like that I magically make random thing X work with VaM or with one of my plugins, because it can be done in just 30 minutes or so. "Random thing X" is usually something like some obscure raytracing plugin for Unreal engine or whatever. It just doesn't work like that. Of course, not everyone is like that, but sadly many are.

Then there is real life. As you may know, I work on AAA games in my real job. We are nearing release in a few months, and stress levels are rising as you would expect. To keep my sanity I have to reduce my VaM time. Since the questions will keep coming in if I remain active, it would mean I wouldn't get any VaM work done at all. Even when simply ignoring the more dumb questions. Not to mention that I can't make any plans when I don't know whether I can spend the following weekend on VaM work or have to stay away from the computer to recover from a stressful week in my real job. VaM really has become more work than fun.

What will happen now?

(Edit: Plans changed slightly, site will remain online although there won't be new content. You may want to unsubscribe. Details and reasoning here.)

I will keep this Patreon site paused for one or two more months. This gives those who want to the opportunity to still make new pledges. This is mostly intended for my "Pay if you liked it" content like my video tutorials and the benchmark scene. If you are an existing Patreon, you won't be charged, just like in the last two months. If you really want to, I think you can unsubscribe and re-subscribe to send me money.

Then, eventually, I will unlaunch the page, which is the process Patreon intends for this kind of thing. That will mean the my Patreon page won't be accessible anymore, unless I decide to relaunch as some time in the future. Maybe I will be back for VaM 2.x next year or so, but no promises.

All my content will remain accessible under CC-BY-SA license via the Hub.


// MacGruber

View Post

Monthly Report: Paused subscriptions for March

Quick update: I activated the pause-function of Patreon again for March. That means active subscribers won't be charged for the coming month. There is nothing you need to do. However, anyone signing up as a new Patreon in March will still be charged normally.

That non-VaM project I mentioned in last month's report is still ongoing and takes all my available free time. Additionally, stress level at my real job is going up as well, simply the nature of game-dev when you get closer to release on a huge project like ours, so I can't do too much on the side. Can't reliably tell you how the future will look like at the moment.

Cheers,
MacGruber

View Post

Monthly Report: Paused subscriptions for February

Hi! Beginning of the month went as planned and I released Essentials and LogicBricks updates, as well as my Connect GPIO plugin, which allows you to control a Raspberry PI's GPIO pins from VaM, which again could control almost any device you hook up to it. Following that, I wanted to start on various IdlePoser improvements, which were detailed in last months report.

However, a non-VaM project has come up that currently takes all my available free time. I have not even managed to start working on IdlePoser at this point, so it's unlikely there will be any release in February.

Therefore I decided to activate the pause-function of Patreon. Assuming this works as advertised, active subscribers won't be charged for February. There is nothing you need to do. Anyone signing up as a new Patreon in February will still be charged normally, though.

I will probably be back in March, depending on how that other project goes.

Cheers,
MacGruber

View Post

Connect v4: Raspberry PI GPIO

Connect is a plugin package that allows you to control external applications and devices via network. This could be an audio-driven E-Stim devices, or now also the GPIO pins of a Raspberry PI, essentially pins you can turn on/off to control stuff. This kind of micro computer is often used for homemade "smart home" devices, like watering your plants, etc. Without any coding, just some soldering/electronics skills, you are now able control all kinds of toys/devices from VaM. At least those where you can access the electronics easily. Could be some vibrator you want to turn on/off or, for example, I modded a Suck-o-Mat some ages ago, since that box is just an air pump with two magnetic valves to create positive/negative air pressure inside a fleshlight. The package also includes VirtualLock, a plugin for virtual self-bondage in VR. In combination all that could theoretically mean you can rig a scene where, if you do not behave and try to escape that slow teasing fleshlight, your dominatrix will punish you with e-stim...in real life!

Content

  • Connect: VaM plugin that connects to one of the apps. Could also be your own app, just tell it a hostname and port to connect to. It allows you to send commands via VaM's build-in trigger system, for example from within a Timeline animation, from LogicBricks, from other plugins or just a UIButton atom.
  • ConnectAudio App: External Windows application that uses your soundcard to generate waveforms your E-Stim power box can interpret. Source code is included, you can use it as a basis for your own application.
  • ConnectAudio Documentation: A 6 page PDF tutorial explaining the commands and how to use the app.
  • ConnectGPIO App: External Linux application, intended to run on any network capable Raspberry PI, e.g. the 3B+ model. Via commands you can set GPIO pins 17-26 however you like. Source code is included, you can use it as a basis for your own application.
  • ConnectGPIO Documentation: A 5 page PDF tutorial showing how to use the app, how to compile it if needed and the supported commands.
  • VirtualLock: VaM plugin tracks your hand and head position, and optionally ensures you are looking at an atom named "VirtualLockFocusPoint". In the first demo scene that means you HAVE to look the girls in the eyes. If you move too much, there is a warning first and at a larger distance a "breach" is triggered. Of course a breach is also trigger if you try to open the UI or quit the game. It is using the VaM trigger system, you can hook it up to all kinds of things. Essentially this is intended for virtual self-bondage in VR.
  • Demo scene 1: Simple scene where essentially the girl is whipping your dick randomly, which is replicated in E-Stim. And....if you try to escape her....it might hurt :D
  • Demo scene 2: Another simple scene where a girl is applying a slow teasing fleshlight. See screenshot. Via sliders you can tweak the animation and also at which point in the animation the network command is send, so you can sync virtual world and the device in the real world.

Usage Instructions

Find usage instructions for the demo scenes on the hub page: https://hub.virtamate.com/resources/connect.1737/

Command Examples

You can send commands via VaM's build-in trigger system. Send whatever text up to 255 characters, the application on the other side interprets it. For my apps I'm using a simple format of command names, followed by parameters and values, separated by semicolons. 

ConnectAudio:

  • BLIP;i=0.7;p=2                            Run behavior "BLIP" with intensity 0.7 and priority 2.
  • WARN;p=3                                     Run behavior "WARN" with priority 3.

ConnectGPIO:

  • GPIO-ON;p=0                              Sets pin 0 to “on”.
  • GPIO-ON;m=1001000000     Sets pins 0 and 3 to “on”.
  • GPIO-OFF;p=7                            Sets pin 7 to “off”.
  • GPIO;m=1001;v=0001            Sets pin 0 to “off” and pin 3 to “on”.


Circuit Example

An example circuit for amplifying the 3.3V/16mA pin output to something with more power, e.g. to switch the 12V magnet valves of the above mentioned sucking machine. Two Photocouplers (KB817) make sure circuits of both the Raspberry PI as well as the Suck-o-Mat are properly isolated, as both have their own power supply. As common Photocouplers can only handle low amounts of power, two MOSFETs (BS170 TO-92 350mA) are used to  amplify the signal. Of course, this could also have been build using mechanical relays.


Changelog for Connect v4

  • Connect: Implemented UI allowing you to use custom hostname and port to connect to.
  • Connect: Improved error handling.
  • Connect: Improved DNS resolve.
  • ConnectAudio.App repackaged to include source code. For some reason source code was not included in the previous versions.
  • ConnectAudio Documentation with minor updates/changes like fixed typos.
  • ConnectGPIO.App and Documentation added. 
  • VirtualLock: Updated to current version of MacGruber_Utils.cs
  • Demo scene 1: Improved the idle animation of the feet so it looks less weird.
  • Demo scene 1: Updated to current package versions of LogicBricks, Essentials and IdlePoser.
  • Demo scene 2: Newly added scene.


Download

  • This is an EarlyAccess release! Download will be available for free under CC BY-SA license after 2022-01-17. You are allowed to reference this package in your own VAR packages, even if they are paid or use a different license. Links to my Patreon are always appreciated.
  • Beware of some browsers mistakenly renaming .var files to .zip when downloading from Patreon. More details on how to install VaM content and missing dependencies here.

View Post

LogicBricks v12: ValueRelay

LogicBricks is a collection of 31 reusable logic plugins to quickly build simple logic without coding. Version 12 just adds a small feature to the ValueRelay brick.

Changelog for LogicBricks v12

  • ValueRelay: Adding RangeMin/Max sliders, so you can remap the value range. This allows you to adjust range of a float trigger via trigger.
  • Updated demo scenes to refer current versions of packages.

Download

  • This is an EarlyAccess release! Download will be available for free under CC BY-SA license after 2022-01-11. You are allowed to reference this package in your own VAR packages, even if they are paid or use a different license. Links to my Patreon are always appreciated.
  • Beware of some browsers mistakenly renaming .var files to .zip when downloading from Patreon. More details on how to install VaM content and missing dependencies here.

View Post

Essentials v14: Maintenance update (free)

Your most essential MacGruber tools in a convenient single VAR package. This version got more bugfixes for PowerHandles, hopefully not introducing new issues. That plugin is a bit delicate as its pulling strings inside VaM to make it do crazy things VaM was never intended for. I hope I got it right this time.

Changelog

  • PowerHandles: Fixed issue with 'SelectRoot' no longer working. Thx AcidBubbles for reporting.
  • PowerHandles: Fixed issue with UI closing when releasing modifier key (CTRL or ALT) before releasing the mouse button.
  • PowerHandles: Fixed issue with collider sphere UI of Empty atoms repearing when releasing mouse button.
  • PowerHandles: Fixed issue with collider sphere UI not being restored when disabling PowerHandles.

Download

View Post

Monthly Report: December

Happy new 2022 everyone! Slightly late monthly report as I wanted to get my Raspberry project at least far enough for a little demo video. So what has been going on last month?

Essentials and LogicBricks

As planned, I did some way overdue maintenance/bugfixing on PowerHandles, SkyMagic and SuperShot, which are all part of my Essentials collection. Especially the fixes for PowerHandles should help anyone working heavily in desktop mode a LOT.

LogicBricks got two new bricks that can be used to have trigger sequences in an easier way. I had something like that in mind for a while, but now someone actually requested a brick like this, I took the opportunity to implement it.

VaM 2.x Plugins

There are/were some discussions going on with Meshed and some other creators how the plugin system of VaM 2.x should work. This has been eating some of my time. I think the concept is promising, but its very early and everything is in flux, so I should not reveal any details at this point. I will leave that to Meshed, once the time is right.

Connect GPIO

As teased in the previous monthly report, looked at my old Connect Audio plugin, which allowed you to control audio-driven E-Stim devices from VaM via triggers. The idea was that a similar plugin could allow you to control GPIO ports on a Raspberry PI. The GPIO ports are essentially pins you can turn on/off to control stuff. This kind of micro computer is often used for homemade "smart home" devices, like watering your plants, etc.

Without any coding, just some soldering/electronics skills, you would be able control all kinds of toys/devices from VaM. At least those where you can access the electronics easily. Could be some vibrator you want to turn on/off or for example, I modded a Suck-o-Mat some ages ago, since that box is just an air pump with two magnetic valves to create positive/negative air pressure inside a fleshlight.

The coding is about 70% done at this point. GPIO pins 17-26 can be set from VaM via triggers. In above video they are hooked to a LED array and controlled from a simple LogicBricks setup I use for testing. I'm gonna need a few more days of work to improve/polish things a bit so it's easier to use and compatible with the old ConnectAudio. Probably should do some documentation and maybe a simple example scene as well.

IdlePoser NEXT

What's next? While I decided to work on the Raspberry PI stuff first, the IdlePoser improvements are not forgotten. In fact, that's what I want to tackle next. I already spend like two days on planning how the new IdlePoser should work. The problem is mostly UI, but I think I got a reasonable concept now.

The current plan, subject to change:

  • Introducing Layers: Instead of having multiple IdlePoser instance, you can have layers.
  • Introducing SubSets: If you have separate parts of a scene that are unrelated, keep them in subsets, so its easier to maintain.
  • Cross-Layer Groups and GroupMasks: Instead of the fixed ABCD... groups, I want to introduce freely namable groups as well as namable group masks. States from different layers can be assigned to the same group. The maximum number of groups will increase from 12 to 64 and you can also assign a custom color to each one for easier debug.
  • Introducing a trigger callback once all layers have reached a state in the set GroupMask. A problem with the old IdlePoser is that you only get a trigger callback, if a layer actually had to change to a different state. That means its difficult to handle, if the layer is already in the designated GroupMask.

Hacking this in, like it was done with the AnimationPoser fork, would be "easy", but not maintainable. Doing it properly will be a lot of work, so its gonna take some time. With real life going on, certainly not before end of February. Before releasing I also want to finally spend some time on producing a video tutorial for IdlePoser. One more of those long overdue things. Benefit is that once you try to explain something to someone, you notice all the problems. Gives me the opportunity to fix them before its released, making changes a lot easier.


Cheers, MacGruber

View Post

LogicBricks v11: SequenceMachine and SequenceChoice

LogicBricks is a collection of now 31 reusable logic plugins to quickly build simple logic without coding. Version 11 introduces two new bricks, SequenceMachine and SequenceChoice.

Changelog for LogicBricks v11

  • SequenceChoice: Similar to RandomChoice and SelectChoice. However, each time it's triggered, it executes the next item in the sequence. There is also a RandomShuffle option. This was a request by lapiroman.
  • SequenceMachine: This is a variant of the same, but with more powerful options. It's similar to StateMachine, except transitions are fixed so states are gone through in sequence. This makes handling this common case a lot easier. Again, there is also a RandomShuffle option.
  • New example 26, see video. Demonstrates how SequenceMachine could be combined with SuperShot (from Essentials) to automatically take screenshots in different poses, light settings, etc from a single button click. Perfect for creators who want to quickly produce screenshots to show off their clothing, looks or hair. Or maybe simply for quick quality control to make sure everything fits as expected.

Download

  • This is an EarlyAccess release! Download will be available for free under CC BY-SA license after 2022-01-11. You are allowed to reference this package in your own VAR packages, even if they are paid or use a different license. Links to my Patreon are always appreciated.
  • Beware of some browsers mistakenly renaming .var files to .zip when downloading from Patreon. More details on how to install VaM content and missing dependencies here.

View Post

Essentials v13: Maintenance update

Your most essential MacGruber tools in a convenient single VAR package. This update fixes a PowerHandles issue accidentally introduced with v12.

Changelog

  • PowerHandles: Fixed issue when no longer cycling through controllers by clicking.

Download

  • This is an EarlyAccess release! Download will be available for free under CC BY-SA license after 2022-01-03. You are allowed to reference this package in your own VAR packages, even if they are paid or use a different license. Links to my Patreon are always appreciated.
  • Beware of some browsers mistakenly renaming .var files to .zip when downloading from Patreon. More details on how to install VaM content and missing dependencies here.

View Post

Essentials v12: Maintenance update

Your most essential MacGruber tools in a convenient single VAR package. This update contains various fixes for PowerHandles, SkyMagic and SuperShot.

Changelog

  • PowerHandles: Fixed issue when releasing modifier key (CTRL or ALT) before releasing the mouse button. Thanks to ZRSX and babul for hints on how to reproduce the issue, so I could finally hunt it down.
  • PowerHandles: Fixed issue with handle position/orientation not being updated when the same is set from AcidBubbles Timeline.
  • PowerHandles: Prevent switch rotation pivot (SHIFT) while actively moving/rotating the control.
  • SkyMagic Loader: Fixed massive performance issue related to SkyMagic used inside subscenes.
  • SkyMagic Loader: Fixed issue with native ReflectionProbes not having their intensity value applied when inside subscenes.
  • SuperShot: Fixed handling of custom screenshots when the camera position atoms are located inside a subscene.

Download

  • This is an EarlyAccess release! Download will be available for free under CC BY-SA license after 2022-01-03. You are allowed to reference this package in your own VAR packages, even if they are paid or use a different license. Links to my Patreon are always appreciated.
  • Beware of some browsers mistakenly renaming .var files to .zip when downloading from Patreon. More details on how to install VaM content and missing dependencies here.

View Post

Monthly Report: November

The Benchmark obviously was the big release of the last few months, which is for now at least considered "done". I have not entirely made up my mind yet on what to do next. Probably first some smaller maintenance/bugfixing updates for my plugins, after that I'm not sure. I'm considering either of the following at the moment as the next project. As usual, I can't make any promises as to when this would be released.

IdlePoser Improvements

You might have noticed the release of AnimationPoser by haremlife (alias crawlman3), which is a fork of IdlePoser. This was done with my permission by the way. While I think the advertisement is a bit exaggerating the usefulness, there are some good ideas in there. I'm considering implementing a similar Layer feature, although better integrated. So you won't need multiple IdlePoser on the same character anymore. Also had an idea for a way to allow for interfacing with the Timeline plugin, to allow the best from both worlds. This is all very vague at the moment, so it might not work out, if it turns out too much work.

Connect GPIO

You might remember my Connect Audio plugin, which allowed you to control audio-driven E-Stim devices from VaM via triggers. I was thinking of a plugin that would allow you to set GPIO ports on a Raspberry PI in a similar way. The Raspberry PI is a low priced micro computer, well it was low priced before the current inflated prices for electronics ;) Anyway, it features a GPIO port, essentially pins you can turn on/off to control stuff. This kind of micro computer is often used for homemade "smart home" devices, like watering your plants, etc. 

Without any coding, just some soldering/electronics skills, you would be able control all kinds of toys/devices from VaM. At least those where you can access the electronics easily. For example, I modded a Suck-o-Mat some ages ago, since that box is just an air pump with two magnetic valves to create positive/negative air pressure inside a fleshlight. Hooking those valves to the GPIO port of a Raspberry PI is straight forward: On the small board on the right just some Optocoupler to isolate the circuits plus a Transistor/Resistor to amplify the signal to the required voltage. You could of course skip that white experimentation board and just connect directly with the PI. "Connect GPIO" would essentially be an easier to use and more generic revival of that old implementation.

Why not use a cheaper Arduino? Because I don't have one, I have a PI. Sure, its overkill for this use case, but you can use it for all kinds of other things :D

Cheers, MacGruber

View Post

Benchmark v3: New scenes and fixes

Version 3 - Changelog

  • New scene with in two variants, featuring 3 characters having fun. Something like this was asked for a lot as it should make a more realistic test, as many VaM scenes have more than one character. As usual the variant is identical except for one thing, in this case "Advanced Colliders" and "Soft Body Physics" are turned off for all 3 characters. On my old machine (i7-4770K) that would have given a noticeable performance boost, while on my new machine (Ryzen 5800X) its almost identical. Very interesting result.
  • As the sky outside was accidentally showing the indoor GI from SkyMagic, I fixed that with some nice foggy night skyline of HongKong. Also a general light tweaks and I disabled the window slats so you can actually enjoy it.
  • A lot more props everywhere!
  • "Official" benchmark does not set the "Physics Update Cap" to 20, making sure low-end systems do not appear faster as they actually. Before the lower bound for FPS measure was 20fps, everything below was just shown as "20". Also physics frames were skipped, so not the full amount of calculations was done. Now the limit is 3 FPS. Note that the maximum value for "Physics Update Cap" that is natively supported by VaM is 3, so you can't apply this setting by hand.
  • Updated result screen UI to have more space for the additional results.
  • There is now also a note on the result screen that it is "expected" to subscribe to my Patreon when using this tool. Also added a paragraph to the resource page. As my monthly revenue went down by roughly 30% since working on this project, I'm trying to make clear that I'm not gonna let myself be exploited by people. Up to this point approximately 130-150 hours of work went into this project over a period of 3.5 months. The "problem" here is that this benchmark has to be free as it is only useful if there is a lot of data. Still, I expect something back from the community. (If you can read this here on Patreon, you are obviously already a subscriber and you are appreciated and absolved of all guilt!)
  • Fixed error when clearing RenderTarget
  • Fixed error when unloading UI assetbundle
  • Various other fixes.
  • Updated credits.

Known issues

  • Note that results from earlier versions are not comparable with version 3! There have been changes to lighting, more props and so on.

Discussion Thread

Download

View Post

Monthly Report: October

The first version of the Benchmark system released this month, plus a minor bugfix release. Seems it was pretty successful in terms of downloads for new Hub resource (currently at 1.7K), reviews and active discussion going on in the designated thread on the Hub. Not successful in terms of Patreon pledges, though. I have lost some 30% earnings before tax over the last 6 months. Apparently that is reward in this community, if you dump out your work for free. But of course, if you read this, you are on of my current 282 subscribers and you are appreciated!

A common complaint, if you can call it like that, was that people are asking for a scene with more than a single character. I agree its needed for a better representation of a "normal scene" and have started to work on that last week, see screenshot above. The current plan is a one-minute-plus HJ scene with 3 characters. The idea is to run it two or three times, like with AdvancedColliders and SoftBodyPhysics turned on/off....something like that. Since I'm not that familiar yet with Timeline and keep thinking in terms of IdlePoser, its slow going, so it may be a while. I'm still experimenting around how to best build this. Maybe I just animate it in Timeline, which is tedious....or I build it in IdlePoser but then record it into Timeline, not sure.

Another thing I need to look into is to turn off the PhysicsUpdateCap entirely or at least set it to a lot higher limit than "3". There have been some people running the Benchmark on low-end systems, achieving less than 20fps. Due to the way VaM works, at that point it will show you  "20 fps" while actually being slower as well as skipping physics updates, so taking shortcuts and not doing the full work. These results are pretty much useless. Thankfully I think I spotted a hack I could use to force VaM to behave properly. However, I have not actually tried, so it might not work.

Cheers,

MacGruber

View Post

Benchmark v2 - Bugfixes

Changelog

  • Hopefully fixed those false "modified version" errors. These seem to have been caused by starting out with any PhysicsRate other than my favorite 60Hz and some obscure float-inaccuracies within VaM.
  • Fixed not counteracting VR head tracking in "Run Scene Only" mode as advertised.
  • Simplified integrity check debugging features so I get info easier when something goes wrong.
  • Removed unnecessary SkyMagic Exporter plugin.

Previous benchmark results made with v1 are compatible as the scenes themselves did not change with any significance.

Download & Infos

View Post

Benchmark v1

Finally....I released the Benchmark system! Please install via the Hub-Browsewithin VaM. All info here: https://hub.virtamate.com/resources/benchmark.11336/

There is a discussion thread where you can share your results here: https://hub.virtamate.com/threads/benchmark-result-discussion.13131/

Why is it free on the Hub and not EarlyAccess although I spend the last 3 months working on it? Because we need data...lots of data! That means usage has to be free and as easy as possible, so it has to be fully hub-hosted. Also this plugin does various integrity checks to ensure valid results, so it refuses to work without its dependencies or with any modifications, etc. Those people who usually unpack VAR files are really forced to install stuff properly this time....hopefully they will see how easy VARs can if done right be and learn :)

View Post

Monthly Report: September

Quick update....this month I had been a bit more busy than expected with my real life job, we are coming near a major project milestone, so stress level goes up, meaning I couldn't do as much VaM work as I usually do. Also no vacation days or legal holidays I could use this month. Not to mention the weather being too good to stay inside ;)

Still, I found some time to work on VaM stuff:

  • Benchmark project: Added UI and code to ask the user about whether Asynchronous SpaceWarp (Oculus) or MotionSmoothing (SteamVR) is enabled and showing this on the result screen. I could not figure out how to read this from the system, so I have to ask the user. Also to raise awareness so you turn it off for the benchmark as the result is useless otherwise ;)
  • Benchmark project: Then I implemented a feature to save a screenshot of the results screen rather than saving the results in text form. This should make it much easier to share results in forums and I can use colors and better formatting to highlight the important things.
  • SkyMagic: I spend half a day failing to figure out why diffuse global illumination does not work correctly with SkyMagic. This was pointed out by AlexV and FCG on the Hub. I think it has something to do with the spherical harmonics not being set correctly. With the current version you just get the diffuse global illumination from the Museum sky. However, manually generating spherical harmonics from the cubemap doesn't seem to work for some reason. If someone wants to continue to thinker with this, find the details here


Additionally I "had" to buy a new PC, because I could use a deal offered by my company for long-term employees to get like 1/3 of the components value for free. While I'm still waiting for some chassis fans to arrive, by now its all assembled and I'm mostly setup again for the important things. However, VaM does not start at the moment...it just crashes instantly on startup. Yay. Tried the obvious things like reinstalling already, no dice. Googling the error message it seems to indicate some general trouble Unity games have with AMD processors. However, I can't be the only VaM user who got a Ryzen 7 5800X. I will try to figure it out on the weekend. But until then I obviously can't work on VaM stuff :(

Otherwise, the plan is still to continue with the plan outlined last month.


Edit: Issue found...it was of course Citrix Workspace which was causing trouble, that's a remote-desktop software I occasionally have to use. Uninstalling that, starting VaM (or whatever other Unity application you may have) once, rebooting for good measure and then reinstalling Citrix seems to have done the trick. So, back to VaM stuff on the weekend!


Cheers, MacGruber

View Post

Monthly Report: August

End of the month, it's report time! Nearly all available VaM time still goes into the Benchmark project I announced in the last report.

What happened so far?

  • Building technical basis for a Benchmark system inside VaM. Its a framework that can capture detailed timings for multiple parts of the scene. Its intended to work in tandem with a LogicBricks StateMachine to control the benchmark and the sub-parts.
  • Figuring out an UI workflow that guides the user through the benchmark, building that UI in UnityEditor and loading in VaM via AssetBundle.
  • Noob-Proofing: Figuring out how to check if the main scene was modified.
  • Noob-Proofing: Figuring out whether the user has session plugins that might interfere.
  • Noob-Proofing: Figuring out whether the user has declined the security dialog for any plugins used in the scene.
  • Noob-Proofing: Figuring out whether VaM was running for more than 30min. Due to VaM/Unity measuring time in milliseconds with float precision, which means only 24bits or roughly 7 decimal digits, running for more than 1,800,000 milliseconds (30min) means time measurements are not precise enough anymore, if you care about accumulated millisecond differences like we do here.
  • Noob-Proofing: Figuring out whether there is any user input, like opening menus, so we need to interrupt the benchmark.
  • Ability to enforce any relevant UserPreferences when running in "official" mode and restoring the previous UserPreferences after the benchmark.
  • Displaying used UserPreferences, System specs and of course the benchmark result on a nice result screen.
  • Dumping the result screen info into a TXT file, in a format that can be posted easily to the Hub. (However, I might decide to change this into taking a screenshot instead, it allows for better formatting, colors, etc. Also not having two ways to display the same info should be less confusing)
  • Figuring out how to counteract head-tracking. Especially when a character is close by, it can make a huge performance difference where you look at, for example because more or less hair needs to be rendered. I did not want to disable head-tracking, as that is also a performance factor. So the solution is to exactly counter-act head tracking every frame, essentially rotating the world around the player in the exact same way the head moved. Of course this is on the list of things to never ever do to avoid motion sickness, but it can't be helped, if we want results to be comparable. Sadly there seems to be a slight jitter, maybe because there is a one frame delay between head movement and correction. Still have to figure that part out.
  • Figuring out how to fade the entire scene to black and back. Well, not technically necessary, but I don't want weird acting light sources and physics snapping into place between while switching between subscenes. This resulted in the ScreenFade plugin. As its useful in other contexts that just this benchmark project, I have added it to LogicBricks v10.
  • Figuring out how wait for a scene to be fully loaded. I need to know exactly when its save to start measuring times. This can be useful for other scenes as well, so it has been added to LogicBricks v10 as well under the name LoadingDelay. This also benefited the fix I made for the FrameRateControl plugin, which was released with Essentials v11.
  • Familiarizing myself a bit with Acid's Timeline and dealing with mocap animation. Since many VaM scenes uses this, it should be part of the benchmark in some way.
  • Figuring out how to remove randomness from the Life plugin. Usually the whole point of the plugin is to add random breathing to make things appear more natural. However, morphs such as the used chest and stomach morphs affect a large parts of the body, which has some performance impact. So I needed to make some hacks to the plugin to have it play a pre-determined list of breaths instead, not make random changes to timings, etc. There is still some randomness, but it should only have a very minor impact.

What still needs doing?

  • Noob-Proofing: Figuring out how to deal with Oculus Asynchronous Spacewarp (ASW) and SteamVR's Motion Smoothing enabled. These reduce motion sickness by introducing additional interpolated images when you fall below your headsets native refresh rate. For example if you run an Oculus Rift with 90Hz, but your machine can't make that, ASW will try to maintain 45 fps instead and introduce interpolated frames in between, so you still run 90Hz. Of course that means the application runs at either 90 or 45fps, with nothing in between. Since normally this is a really good thing to do, it helps a lot of people to not get motion sick, its of course enabled by default for both Oculus and SteamVR. However, for a benchmark where you want to figure out whether one system is slightly faster or slower than another system, using this is defeats the entire purpose. It would only tell you whether or not you can maintain stable 45 or 90fps, nothing more. So for a proper benchmark this needs to be turned off.  The problem here is that as far as I can tell its not possible for an Unity application or VaM plugin to reliably figure out whether or not that's enabled, let alone turning it on/off for you automatically. I will probably have to go with asking the user whether this is on or off via a yes/no/maybe question, coupled with instructions how to turn it on/off, so I can display a disclaimer in the result screen.
  • Noob-Proofing: I might need a similar question dialog to ask whether the machine is overclocked. I can't detect that from what data Unity Engine providing.
  • Noob-Proofing: Adding checks whether subscenes have been modified. Should be easy to do, though.
  • Noob-Proofing: Figure out how to at least read the Headset FOV setting and show it in the results.
  • Figure out what to do with tracking of hands and additional trackers someone might have.
  • Figure out a better way to attach the Benchmark HUD to the player head. Some headsets out there may have different FOV, so it might be positioned badly.

What happened to that 100$ scene commission?

Once the technical side of this is settled, I will obviously need a number of short scenes to actually run the benchmark on. For that reason I put out a commission last month to have someone build that scene for me. As probably most people, I have a life and a real job, so there is only so much time that can be put into VaM without going insane. Therefore the main intention from my side here was for me to save time, not cooperate for cooperation's sake. 

While I got a couple of responses, sadly there was nobody among them I trusted to have fully understood the scope and complexity of what is needed. Maybe there would have been someone among them with the needed skills and time, but without some released scenes on Hub/Patreon with similar quality/complexity to show for, there is no way for me to know. There would have been a high risk of having to iterate back and forth 10-20 times to get what is needed, or failing altogether, if that someone was in way over their head. That might have meant having to spend more time discussing and explaining than it would take for me to do the work myself. Remember, the goal was to save time. Also its frustrating, for both sides. So I will probably do it myself, which means it will take a while.

However, I got permission from ReignMocap to use some of his mocap recordings for free. Also AcidBubbles allowed me to use part of a scene. In both cases there would still be lots of work required from my side to get it to a state that is usable for me. But its a start. I have not yet made a final decision on what I'm going to use, I might also end up using parts of one of my own scenes. Benefit of doing the work myself is of course that I can do it in my own time, not having to wait on anybody....and not wasting time because I wasn't able to explain what I needed in the first place :)


Cheers, MacGruber

View Post

Essentials v11: Maintenance update

Your most essential MacGruber tools in a convenient single VAR package. Just a quick maintenance update for FrameRateControl.

Changelog

  • FrameRateControl: Fixed detection when VaM is loading, which probably broke with VaM's Cyberpunk update. When you got "Pause VaM when not focused" enabled, the plugin will now again not pause while you are loading a scene or assets. So it actually loads and you are free to do other stuff while waiting for VaM, not waste your time anymore. (Allowing VaM to pause when the window is not focused, e.g. while coding plugins or working in Blender, Daz3D, etc. means you do not waste CPU/GPU resources on VaM for no reason. Less fan noise and temperature or more performance for whatever you are doing. Global climate will be more happy too, if you have a lower power bill.)

Download

  • This is an EarlyAccess release! Download will be available for free under CC BY-SA license after 2021-09-06. You are allowed to reference this package in your own VAR packages, even if they are paid or use a different license. Links to my Patreon are always appreciated.
  • Beware of some browsers mistakenly renaming .var files to .zip when downloading from Patreon. More details on how to install VaM content and missing dependencies here.

View Post

LogicBricks v10: ScreenFade + LoadingDelay

Among other things, two new bricks for LogicBricks. These will be needed for the Benchmark project to reduce motion sickness as much as possible. Due to the locked VR head tracking, motion sickness is a problem in that scene you usually would not have to this degree. So I need to use every trick in the book, at least those that won't affect benchmark results, to reduce it as much as possible. In this case fading to black before teleporting the player. However, we all know VaM's jerky loading, so nicely covered up scene transitions this will be useful for lots of other scenes. So it made sense to add this to LogicBricks.

Changelog for LogicBricks v10

  • ScreenFade: New brick that can fade the entire scene to any color. Nice to cover up loading transitions, see video above, or other things like player teleports or simply helping with telling the story of your scene.
  • LoadingDelay: New brick similar to the good old Delay, except that it internally resets its timer while there is any loading in progress. So you trigger it before you start loading stuff and get a trigger back X seconds after loading finished. The extra delay allows you to wait for hair/clothing/body physics to settle into place.
  • EventAudioQueueEmpty: Added option to retry every frame while the queue is empty. This solves the problem that VaM may report everything is "fully loaded", and you can trigger audio already, except nothing happens because the audio is not yet there. So if you want to play music when your scene launches and immediately schedule a new track once the previous one is finished, this is your thing to trigger that.
  • Timer, RandomTimer: Reset timer on re-enable.
  • Delay, Blend, Loop (and RandomX variants): Reset bricks on being disabled. Fixed bricks not being able to trigger themselves.
  • Separated the example scenes into its own VAR package. This way I can use Life and IdlePoser in the examples without having them as dependencies for the main package.
  • Reworked example 24, instead of weird and unpractical stacked AnimationPatterns its now using IdlePoser. So, its an all-in-one example showing how you can combine StateMachine and ValueUpDown to control animation of IdlePoser, also using Empty atom anchors animated by LinearAnimation bricks and TriggerSync to keep the state changes synced.
  • New example 25, see video. Demonstrates how to use the new LoadingDelay and ScreenFade bricks to make nicely smooth loading scene transitions. Of course backed by a StateMachine brick.

Download

  • This is an EarlyAccess release! Download will be available for free under CC BY-SA license after 2021-09-06. You are allowed to reference this package in your own VAR packages, even if they are paid or use a different license. Links to my Patreon are always appreciated.
  • Beware of some browsers mistakenly renaming .var files to .zip when downloading from Patreon. More details on how to install VaM content and missing dependencies here.

View Post

Fluff: Benchmark Prototype

After burning a full week of vacation on this, I got a first working prototype of the benchmark tool. The idea is to measure VaM performance in a scene that is identical for everyone with as little random factors as possible. VaM's settings should be enforced to be the same for everyone to make the results actually comparable. That will allow us to gather solid performance data for VaM and system info on different peoples machines, instead of comparing apples with oranges because the other person had setting X enabled or was 1m further from the character.

Note that there is no video editing here, all camera cuts and fade to black are made entirely in VaM. I think that particular plugin, in combination with LogicBricks StateMachine obviously, could be useful for story scenes? The jitter obviously comes from not capturing the video with VSync enabled, as you hopefully learned to do in my tutorial. But a benchmark with VSync enabled is not useful :D

So far nobody responded to my call for a commission, so the scene itself is just a placeholder with mocap by ReignMocap. Although I might as well use it, but I would need a second scene with two characters. Possibly I might use one of the sub-scenes in Acid's Intimate scene. As said, I just burned some 40+ hours during vacation, just getting the coding somewhere around 60% done. There is still plenty of stuff to do, I don't have the capacity at the moment to build a major quality scene. So we will see where this goes.

View Post

Fluff: Testing Mocap vs. Gaze/Glance

Just testing mocap interaction with Gaze/Glance. I wanna see if this could be something for the Benchmark project I'm working on.

View Post