Hey Rifters,

Its time to get Unreal, again. Unreal Engine 4 now has an absurdly awesome subscription plan, 20 bucks a month for full access to the engine – including source code. So far, VR compatibility is built in, the Rift is detected automatically when the game is full screen. Nuts.

A couple of useful things about UE4 in my short term playing around with it:

Are you having issues packaging your project for Windows? Perhaps getting an error like

MainFrameActions: Packaging (Windows): RunUAT.bat ERROR: AutomationTool was unable to run successfully. MainFrameActions: Packaging (Windows): BUILD FAILED

Looks like you need to install Visual Studio first:

  • Download and install Visual Studio Express 2013 from here
  • Close and restart UE4
  • Open and Build Project
  • Package Project for Windows

Also, support has not yet listed all the console commands for UE4. You can get them by making your Output Log visible (Window>Output Log) and entering the command “DumpConsoleCommands”. Support will have documentation on the commands soon. In the mean time, here are some useful ones for VR development:

stereo show
Print list of settings to log.

stereo on/off
Enabled/disable stereo rendering for HMD device.

stereo reset
Resets IPD & clears IPD/stereo overrides.

stereo HEADX=, HEADY= or HEADZ=<value>
Sets X, Y or Z component of head model.

stereo e=<value>
Override and set IPD.

hmd enable/disable
Enable/disable HMD device.

hmd vsync on/off/reset
Control or reset vsync.

showlog 
Brings up the log window, so you can check if the Rift is recognized with OVRversion.

ovrversion
Print LibOVR version build date to log.

OPEN [level name]
Opens a level. Once you type open, the levels available within the project will pop up in the auto complete.

And how about I list them all here for those folks ready to Ctrl-F:

ACTOR
ADDSELECTED
AllowAsyncComponentTicks
AllowAsyncRenderThreadUpdates
AllowCachedOverlaps
AllowCachedUniformExpressions
AllowConcurrentTickQueue
AllowParallelGC
ANIM
ANIMSEQSTATS
APEXVIS
AssetRegistry.Debug.FindInvalidUAssets
AssetRegistry.GetByClass
AssetRegistry.GetByName
AssetRegistry.GetByPath
AssetRegistry.GetByTag
AssetRegistry.GetDependencies
AssetRegistry.GetReferencers
AUDIO
automation
AUTOMERGESM
AvoidanceDisplayAll
AvoidanceSystemToggle
BAKEANIMSETS
BLUEPRINTIFY
BRUSH
BSP
BugItGo
BUILDLIGHTING
BUILDPATHS
CAMERA
CANALYZER
CancelTextureStreaming
CAPTUREMODE
CauseHitches
CDODump
CE
CHECKSOUNDS
CLEANBSPMATERIALS
CLEANMATINEEANIMSETS
CLOSE_SLATE_MAINFRAME
CollectionManager.Add
CollectionManager.Create
CollectionManager.Destroy
CollectionManager.Remove
Compat.MAX_GPUSKIN_BONES
Compat.UseDXT5NormalMaps
con.MinLogVerbosity
CONFIGHASH
CONFIGMEM
CONTENTCOMPARISON
CONVERTMATINEES
CountDisabledParticleItems
CPUTime.Dump
CRACKURL
CREATESMFROMBSP
DDC.MountPak
DDC.UnmountPak
DEBUG
DebugTrackedTextures
DEFER
DELETE
DIR
DISABLEALLSCREENMESSAGES
DisableLPF
DisableRadio
DISABLESCREENMESSAGES
DISASMSCRIPT
DISCONNECT
DUMPALLOCS
DUMPAVAILABLERESOLUTIONS
DumpBPClasses
DumpConsoleCommands
DumpCopyPropertiesForUnrelatedObjects
DumpLevelScriptActors
DumpLightmapSizeOnDisk
DUMPMATERIALSTATS
DUMPMODELGUIDS
DUMPPARTICLECOUNTS
DUMPPARTICLEFRAMERENDERINGSTATS
DUMPPARTICLEMEM
DUMPPARTICLERENDERINGSTATS
DUMPPUBLIC
DUMPSELECTION
DUMPSHADERSTATS
DumpSoundInfo
DumpStatPackets
DumpThumbnailStats
dumpticks
DumpUnbuiltLightInteractions
DumpVisibleActors
DUPLICATE
EDCALLBACK
EDIT
EDITACTOR
EDITARCHETYPE
EDITDEFAULT
EDITOBJECT
ENABLEALLSCREENMESSAGES
EnableRadio
ENABLESCREENMESSAGES
EXEC
EXECFILE
EXIT
ExportNavigation
FindBadBlueprintReferences
FindOutdatedInstances
FIXUPBADANIMNOTIFIERS
FLUSHIOMANAGER
FLUSHLOG
FLUSHPERSISTENTDEBUGLINES
FNAME
ForceBuildStreamingData
FREEZEALL
FreezeAtPosition
FREEZERENDERING
FREEZESTREAMING
ftest
FX.AllowAsyncTick
FX.AllowCulling
FX.AllowGPUSorting
FX.FreezeGPUSimulation
FX.FreezeParticleSimulation
FX.GPUCollisionDepthBounds
FX.GPUSpawnWarningThreshold
FX.MaxCPUParticlesPerEmitter
FX.MaxGPUParticlesSpawnedPerFrame
FX.MaxParticleTilePreAllocation
FX.ParticleSlackGPU
fx.RestartAll
FX.TestGPUSort
FX.VisualizeGPUSimulation
g.DebugCameraTraceComplex
g.TimeToBlockOnRenderFence
GAMEVER
GAMEVERSION
GAMMA
GET
GETALL
GETALLSTATE
GPUSort.DebugOffsets
GPUSort.DebugSort
GROUPS
HEAPCHECK
HighResShot
HotReload
HTTP
InvestigateTexture
IsolateDryAudio
IsolateReverb
JUMPTO
KE
Kismet.ExpertMode
KISMETEVENT
Landscape.Combine
Landscape.Patches
Landscape.Static
LEVEL
LevelEditor.ToggleImmersive
LIGHT
LightmapStreamingFactor
LIGHTMASSDEBUG
LIGHTMASSSTATS
ListAudioComponents
LISTFUNC
LISTFUNCS
ListLoadedPackages
LISTMAPPKGDEPENDENCIES
ListOrphanClasses
ListPackageContents
LISTPARTICLESYSTEMS
ListPrecacheMapPackages
LISTPROPS
ListRootSetObjects
ListSoundClasses
ListSoundClassVolumes
ListSoundDurations
ListSounds
LISTSPAWNEDACTORS
ListStreamingTextures
ListStreamingTexturesCollect
ListStreamingTexturesReport
ListStreamingTexturesReportReady
LISTTEXTURES
ListTrackedTextures
ListWaves
LMDEBUGMAT
LMDEBUGPAD
LMIMM
LMIMMEDIATE
LMIMP
LMPADDING
LMPROFILE
LMSORT
LOAD
LOG
LOGACTORCOUNTS
LOGOUTSTATLEVELS
LogTicks
ls.PrintNumLandscapeShadows
MACRO
MainFrame.ToggleFullscreen
MAP
MEM
MemReport
MemReportDeferred
MERGEMESH
MESH
MESHMAP
MESSAGING
Metadata.Dump
ModalTest
MODE
ModifySoundClass
Module
NAMEHASH
NET
net.AllowConnectionSkipping
net.AllowPropertySkipping
net.ContextDebug
net.DeleteDormantActor
net.DoPropertyChecksum
net.DormancyDraw
net.DormancyDrawCullDistance
net.DormancyEnable
net.DormancyValidate
net.DumpRelevantActors
net.ListActorChannels
net.ListNetGUIDExports
net.ListNetGUIDs
net.Montage.Debug
net.PackageMap.DebugObject
net.Packagemap.FindNetGUID
net.Reliable.Debug
net.Replication.DebugProperty
net.RPC.Debug
net.TestObjRefSerialize
NETPROFILE
NEW
NEWANIM
NumStreamedMips
OBJ
ONLINE
OPEN
OPEN_VS
OpenGL.SkipCompute
OpenGL.UseMapBuffer
p.APEXMaxDestructibleDynamicChunkCount
p.APEXMaxDestructibleDynamicChunkIslandCount
p.bAPEXSortDynamicChunksByBenefit
p.BounceThresholdVelocity
p.ConstraintDampingScale
p.ConstraintStiffnessScale
p.ContactOffsetFactor
p.EnableAsyncScene
p.EncroachEpsilon
p.InitialOverlapTolerance
p.MaxContactOffset
p.NetCorrectionLifetime
p.NetEnableMoveCombining
p.NetProxyShrinkHalfHeight
p.NetProxyShrinkRadius
p.NetShowCorrections
p.PenetrationPullbackDistance
p.ShowInitialOverlaps
p.ToleranceScale_Length
p.ToleranceScale_Mass
p.ToleranceScale_Speed
PARTICLE
PARTICLEMESHUSAGE
PauseTextureStreaming
PHYSXSHARED
PIVOT
PlaySoundCue
PlaySoundWave
POLY
PREFAB
PROFILE
PROFILEGPU
PROFILEGPUHITCHES
PRUNEANIMSETS
PurgeOldLightmaps
PVD
PXVIS
QUIT
QUIT_EDITOR
r.AllowLandscapeShadows
r.AllowOcclusionQueries
r.AllowPointLightCubemapShadows
r.AllowPrecomputedVisibility
r.AllowStaticLighting
r.AmbientOcclusionLevels
r.AmbientOcclusionRadiusScale
r.AmbientOcclusionStaticFraction
r.Atmosphere
r.AtmosphereRender
r.BlackBorders
r.BloomQuality
r.BokehDOFIndexStyle
r.BufferVisualizationDumpFrames
r.BufferVisualizationOverviewTargets
r.BufferVisualizationTarget
r.Cache.DrawDirectionalShadowing
r.Cache.DrawInterpolationPoints
r.Cache.DrawLightingSamples
r.Cache.LightingCacheDimension
r.Cache.LightingCacheMovableObjectAllocationSize
r.Cache.LightingCacheUnbuiltPreviewAllocationSize
r.Cache.LimitQuerySize
r.Cache.QueryNodeLevel
r.Cache.ReduceSHRinging
r.Cache.SampleTransitionSpeed
r.Cache.UpdateEveryFrame
r.ClearSceneMethod
r.ClearWithExcludeRects
r.Color.Max
r.Color.Mid
r.Color.Min
r.CompileShadersForDevelopment
r.CompositionGraphDebug
r.CreateShadersOnLoad
r.CustomDepth
r.D3DCompilerPath
r.DBuffer
r.Decal.StencilSizeThreshold
r.DemosaicVposOffset
r.DepthOfFieldNearBlurSizeThreshold
r.DepthOfFieldQuality
r.DetailMode
r.DisableLODFade
r.DistanceFadeMaxTravel
r.DownsampledOcclusionQueries
r.DrawRectangleOptimization
R.DumpDrawListStats
r.DumpingMovie
r.DumpRenderTargetPoolMemory
r.DumpShaderDebugInfo
r.EarlyZPass
r.EarlyZPassMovable
r.Editor.2DGridFade
r.Editor.2DSnapFade
r.Editor.2DSnapMin
r.Editor.2DSnapScale
r.Editor.3DGridFade
r.Editor.3DSnapFade
r.Editor.AlignedOrthoZoom
r.Editor.MovingPattern
r.Editor.NewLevelGrid
r.Editor.OpaqueGizmo
r.EmitMeshDrawEvents
r.ExposureOffset
r.EyeAdaptationQuality
r.FastBlurThreshold
R.FinishCurrentFrame
r.FogDensity
r.FogStartDistance
r.ForceLOD
r.ForwardBasePassSort
r.FreeSkeletalMeshBuffers
r.FullScreenMode
r.GBufferFormat
r.GeneralPurposeTweak
r.GPUBusyWait
r.HighQualityLightMaps
r.HZBOcclusion
r.IndirectLightingCache
r.IndirectLightingCacheInLightingVolume
r.InvalidateCachedShaders
r.LensFlareQuality
r.LightFunctionQuality
r.LightPropagationVolume
r.LightShaftBlurPasses
r.LightShaftDownSampleFactor
r.LightShaftFirstPassDistance
r.LightShaftNumSamples
r.LightShaftQuality
r.LightShafts
r.LimitRenderingFeatures
r.ListSceneColorMaterials
r.LODFadeTime
r.MaterialQualityLevel
r.MaxAnisotropy
r.MaxCSMRadiusToAllowPerObjectShadows
r.MaxForwardBasePassDraws
r.MaxGPUSkinCacheElementsPerFrame
r.MaxQualityMode
r.MinScreenRadiusForCSMDepth
r.MinScreenRadiusForDepthPrepass
r.MinScreenRadiusForLights
r.MipMapLODBias
r.MobileContentScaleFactor
r.MobileHDR
r.MobileHDR32bpp
r.MotionBlurFiltering
r.MotionBlurQuality
r.MotionBlurSoftEdgeSize
r.MSAA.CompositingSampleCount
r.OneFrameThreadLag
r.OnlyStreamInTextures
r.ParticleLODBias
r.PostProcessAAQuality
r.PrecomputedVisibilityWarning
r.PreTileTextures
r.PreViewTranslation
r.RecompileRenderer
r.ReflectionCapture
r.ReflectionEnvironment
r.RefractionQuality
r.RenderTargetPoolMin
r.RenderTargetPoolTest
r.RenderTargetSwitchWorkaround
r.RenderTimeFrozen
r.SceneColorFormat
r.SceneColorFringeQuality
r.SceneRenderTargetResizeMethod
r.ScreenPercentage
r.ScreenPercentageSoftness
r.SeparateTranslucency
r.SetNearClipPlane
r.SetRes
r.ShaderDevelopmentMode
r.Shadow.CachePreshadow
r.Shadow.ConservativeBounds
r.Shadow.CSM.MaxCascades
r.Shadow.CSM.TransitionScale
r.Shadow.CSMDepthBias
r.Shadow.CSMSplitPenumbraScale
r.Shadow.DistanceFieldPenumbraSize
r.Shadow.DistanceScale
r.Shadow.DrawPreshadowFrustums
r.Shadow.FadeExponent
r.Shadow.FadeResolution
r.Shadow.FreezeCamera
r.Shadow.MaxResolution
r.Shadow.MinPreShadowResolution
r.Shadow.MinResolution
r.Shadow.PerObject
r.Shadow.PointLightDepthBias
r.Shadow.PreshadowExpand
r.Shadow.PreShadowFadeResolution
r.Shadow.PreShadowResolutionFactor
r.Shadow.Preshadows
r.Shadow.RadiusThreshold
r.Shadow.RadiusThresholdRSM
r.Shadow.SpotLightDepthBias
r.Shadow.SpotLightTransitionScale
r.Shadow.TexelsPerPixel
r.Shadow.TransitionScale
r.Shadow.UnbuiltNumWholeSceneDynamicShadowCascades
r.Shadow.UnbuiltWholeSceneDynamicShadowRadius
r.Shadow.WholeSceneShadowUnbuiltInteractionThreshold
r.ShadowQuality
r.ShowPrecomputedVisibilityCells
r.ShowRelevantPrecomputedVisibilityCells
r.SimpleDynamicLighting
r.SkeletalMeshLODBias
r.SkeletalMeshLODRadiusScale
r.SkinCaching
r.SSR.MaxRoughness
r.SSR.Quality
r.SSR.RoughnessScale
r.SSR.Temporal
r.SSSSS
r.StaticMeshLODDistanceScale
r.Streaming.Boost
r.Streaming.MipBias
r.Streaming.PoolSize
r.Streaming.UseFixedPoolSize
r.SubsurfaceQuality
r.TemporalAASamples
r.TemporalAASharpness
r.TessellationAdaptivePixelsPerTriangle
r.TextureStreaming
r.TiledDeferredShading
r.TiledDeferredShading.MinimumCount
r.TonemapperQuality
r.TranslucencyLightingVolumeDim
r.TranslucencyLightingVolumeInnerDistance
r.TranslucencyLightingVolumeOuterDistance
r.TranslucencyVolumeBlur
r.TranslucentLightingVolume
r.TranslucentVolumeFOVSnapFactor
r.TranslucentVolumeMinFOV
r.TriangleOrderOptimization
r.UniformBufferPooling
r.UpsampleQuality
r.UseDiffuseSpecularMaterialInputs
r.ViewDistanceScale
r.ViewportTest
r.VirtualTexture
r.VirtualTextureReducedMemory
r.VisualizeOccludedPrimitives
r.VisualizeTexturePool
r.VSync
r.WireframeCullThreshold
Radio_ChebyshevCubedMultiplier
Radio_ChebyshevMultiplier
Radio_ChebyshevPower
Radio_ChebyshevPowerMultiplier
REBUILDVOLUMES
RecompileGlobalShaders
RecompileShaders
RECONNECT
ReferenceInfo
RELOADCFG
RELOADCONFIG
REMOTETEXTURESTATS
REMOVEARCHETYPEFLAG
RepairBlueprint
ResetSoundState
RestoreLandscapeLayerInfos
rhi.DumpMemory
RHI.FeatureSetLimit
RHI.ForceThirtyHz
RHI.GPUHitchThreshold
RHI.MaxSyncCounter
RHI.RefreshPercentageBeforePresent
RHI.SaveScreenshotAfterProfilingGPU
RHI.ShowProfilerAfterProfilingGPU
RHI.SyncInterval
RHI.SyncIntervalOgl
RHI.SyncRefreshThreshold
RHI.SyncThreshold
RHI.SyncWithDWM
SAY
SCALABILITY
SCALE
SCALELEVEL
ScaleMeshes
SELECT
SELECTNAME
SERVERTRAVEL
SET
SetBaseSoundMix
SETDETAILMODE
SETDETAILMODEVIEW
SETNOPEC
SETREPLACEMENT
sg.AntiAliasingQuality
sg.EffectsQuality
sg.PostProcessQuality
sg.ResolutionQuality
sg.ShadowQuality
sg.TextureQuality
sg.ViewDistanceQuality
SHADERCOMPLEXITY
ShadowmapStreamingFactor
ShowFlag.AmbientCubemap
ShowFlag.AmbientOcclusion
ShowFlag.AntiAliasing
ShowFlag.Atmosphere
ShowFlag.AudioRadius
ShowFlag.BillboardSprites
ShowFlag.Bloom
ShowFlag.Bounds
ShowFlag.Brushes
ShowFlag.BSP
ShowFlag.BSPSplit
ShowFlag.BSPTriangles
ShowFlag.BuilderBrush
ShowFlag.CameraFrustums
ShowFlag.CameraImperfections
ShowFlag.CameraInterpolation
ShowFlag.Collision
ShowFlag.CollisionPawn
ShowFlag.CollisionVisibility
ShowFlag.ColorGrading
ShowFlag.CompositeEditorPrimitives
ShowFlag.Constraints
ShowFlag.Cover
ShowFlag.DebugAI
ShowFlag.Decals
ShowFlag.DeferredLighting
ShowFlag.DepthOfField
ShowFlag.Diffuse
ShowFlag.DirectLighting
ShowFlag.DistanceCulledPrimitives
ShowFlag.DynamicShadows
ShowFlag.Editor
ShowFlag.EyeAdaptation
ShowFlag.Fog
ShowFlag.Game
ShowFlag.GameplayDebug
ShowFlag.GBufferHints
ShowFlag.GlobalIllumination
ShowFlag.Grain
ShowFlag.Grid
ShowFlag.HighResScreenshotMask
ShowFlag.HitProxies
ShowFlag.HMDDistortion
ShowFlag.IndirectLightingCache
ShowFlag.InstancedStaticMeshes
ShowFlag.Landscape
ShowFlag.LargeVertices
ShowFlag.LensFlares
ShowFlag.LevelColoration
ShowFlag.LightComplexity
ShowFlag.LightFunctions
ShowFlag.LightInfluences
ShowFlag.Lighting
ShowFlag.LightMapDensity
ShowFlag.LightRadius
ShowFlag.LightShafts
ShowFlag.LOD
ShowFlag.LpvLightingOnly
ShowFlag.Materials
ShowFlag.MeshEdges
ShowFlag.ModeWidgets
ShowFlag.MotionBlur
ShowFlag.Navigation
ShowFlag.OnScreenDebug
ShowFlag.OverrideDiffuseAndSpecular
ShowFlag.Particles
ShowFlag.Pivot
ShowFlag.PostProcessing
ShowFlag.PostProcessMaterial
ShowFlag.PrecomputedVisibility
ShowFlag.PrecomputedVisibilityCells
ShowFlag.PreviewShadowsIndicator
ShowFlag.PropertyColoration
ShowFlag.ReflectionEnvironment
ShowFlag.ReflectionEnvironmentLightmapMixing
ShowFlag.ReflectionOverride
ShowFlag.Refraction
ShowFlag.Rendering
ShowFlag.SafeFrames
ShowFlag.SceneColorFringe
ShowFlag.ScreenPercentage
ShowFlag.ScreenSpaceReflections
ShowFlag.Selection
ShowFlag.SelectionOutline
ShowFlag.SeparateTranslucency
ShowFlag.ShaderComplexity
ShowFlag.ShadowFrustums
ShowFlag.ShadowsFromEditorHiddenActors
ShowFlag.SkeletalMeshes
ShowFlag.SkyLighting
ShowFlag.Snap
ShowFlag.Specular
ShowFlag.Splines
ShowFlag.StaticMeshes
ShowFlag.StationaryLightOverlap
ShowFlag.StreamingBounds
ShowFlag.TemporalAA
ShowFlag.Tessellation
ShowFlag.TestImage
ShowFlag.TextRender
ShowFlag.TexturedLightProfiles
ShowFlag.Tonemapper
ShowFlag.Translucency
ShowFlag.VectorFields
ShowFlag.VertexColors
ShowFlag.Vignette
ShowFlag.VisLog
ShowFlag.VisualizeAdaptiveDOF
ShowFlag.VisualizeBuffer
ShowFlag.VisualizeDOF
ShowFlag.VisualizeHDR
ShowFlag.VisualizeLightCulling
ShowFlag.VisualizeLPV
ShowFlag.VisualizeMotionBlur
ShowFlag.VisualizeOutOfBoundsPixels
ShowFlag.VolumeLightingSamples
ShowFlag.Volumes
ShowFlag.Wireframe
SHOWLOG
SHOWMATERIALDRAWEVENTS
ShowMipLevels
ShowSelectedLightmap
ShowSoundClassHierarchy
SKELETALMESH
Slate.AllowToolTips
Slate.bAllowThrottling
Slate.DeferWindowsMessageProcessing
Slate.TargetFrameRateForResponsiveness
Slate.ThrottleWhenMouseIsMoving
Slate.ToolTipDelay
Slate.ToolTipFadeInDuration
Slate.ToolTipWrapWidth
sm.DerivedDataTimings
SoundTemplateInfo
STARTFPSCHART
STARTMOVIECAPTURE
STAT
STATICMESH
STOPFPSCHART
STOPMOVIECAPTURE
StreamingManagerMemory
STREAMMAP
StreamOut
SWARMDISTRIBUTION
SynthBenchmark
t.HitchThreshold
t.IdleWhenNotForeground
t.MaxFPS
t.OverrideFPS
t.UnsteadyFPS
TAGSOUNDS
TestLFEBleed
TestLPF
TESTPROPS
TESTSLATEGAMEUI
TestStereoBleed
TestVorbisDecompressionSpeed
Tex.AsyncDXTBlocksPerBatch
Tex.DerivedDataTimings
TextureGroups
TOGGLEALLSCREENMESSAGES
ToggleForceDefaultMaterial
TOGGLEGTPSYSLOD
ToggleLight
TOGGLEONSCREENDEBUGMESSAGEDISPLAY
TOGGLEONSCREENDEBUGMESSAGESYSTEM
ToggleRenderingThread
TOGGLESCREENMESSAGES
ToggleShadowIndexBuffers
TOGGLESOCKETGMODE
TRACETAG
TRACKPARTICLERENDERINGSTATS
TrackTexture
TRANSACTION
TRAVEL
UI.BlurRadius
UI.TestUIBlur
UntrackTexture
UpdateLandscapeEditorData
UpdateLandscapeHoleCollision
UpdateLandscapeMIC
VIEWNAMES
Vis
VISLOG
VISLOG exit
VISLOG record
VISLOG stop
VisRT
VisualizeTexture

 

Until the Next VR Experiment,

–Bruce

Hey Rifters!

I know its been a while since I updated this site. My initial intention was to record my development efforts while making a VR experience. As it turns out, after I put up a few videos the VR community reached out to me in a big way. Most of my time has been spent making video content, performing live streams, co-organizing meetups, testing software, and speaking gigs – like the one posted above. Its been an absolute blast!

At this point, my web presence needs to be something that a WordPress.com blog can no longer support. This site will most likely be inactive for a good while. However, never fear! My YouTube and Twitch channels will remain active. Also, I am currently building CymaticBruce.com, a place that will be more focused on VR software experiences and VR developer networking. Oh yeah, and a “Bruce’s Recommended Playlist” that will be better organized. Stay tuned!

Yours in Innovation,

–Cymatic Bruce
@CymaticBruce

 

Hey Rifters!

This week is another change up: a live stream that I did last night with some VR devs and enthusiasts!
http://www.twitch.tv/cymaticbruce/b/397153899
Here are some highlights:

15:55 Oculus at E3 Speculation
17:05 Browser Apps and Productivity Apps
19:00 Music Games and VR
26:25 “Concert Attendant Hero”
26:55 VR and Stage Fright
32:20 Donkey Kong VR
38:23 Planet 1 Play test
47:18 First Law Play test
1:02:40 Notch Cubes Play test
1:07:20 Rift Amp Play test
1:12:00 Rift Runner Play test
1:19:38 What I am looking forward to with the Rift
1:23:00 Is the Rift Consumer Ready?
1:28:50 Malfate’s Castle Play Test
1:32:05 Rift Software Resources
1:36:18 Head Bob or no Head Bob?
1:43:10 Heli Hell 2 Play test
1:56:12 Rift, 3D, and Eye Strain
2:00:55 Watching a SBS 3D movie in Media Player
2:06:12 Single vs. Double Screen HMDs

I also will be putting a Torque 3D play test on my YouTube Channel. I am thinking of switching over to Torque from UDK, I will keep you posted on that status.

Still working on tutorial writing, trying to make time!

Logging Out,
–Cymatic Bruce

Video  —  Posted: April 29, 2013 in VR Dev
Tags: , , , , , , ,

Hi Rifters!

Here we go with another VR Dev journal entry. Not a whole lot to show off here – this past week was a crazy one! I have been helping test alpha builds, writing articles for Road To VR, making videos, and even doing an interview or two. Whew!

In this video, I show off the Kismet toggle switch. A great place to learn how to do that is the 3DBuzz tutorials:

http://www.3dbuzz.com/training/view/unreal-development-kit/kismet

Also, I have begun working on the key functionality of the Holodeck – taking you somewhere else. My first test is to gradually take the player from the holodeck room to the epic courtyard. In my first attempt, I simply made the walls invisible when opening the door. DOH!

Game development requires a lot of determination, and sometimes things don’t progress as quickly or as smoothly as we hope. Don’t give up!

Logging Out,

–Bruce

Video  —  Posted: April 22, 2013 in VR Dev
Tags: , , , ,

Hey Rifters!

What a week!

Its strange to know that I have only had my Rift dev kit for 7 days, with everything that has happened. One first impressions vid turned into two, which turned into a ridiculous number of videos, views, and comments. Oh, and an article on PCGamer.com:

http://www.pcgamer.com/2013/04/15/mirrors-edge/

O_O
A huge THANK YOU to all the folks who have watched my videos, subscribed, left feedback and encouraging words. Words fail to express how moved I am!

So, a different type of blog entry this time around. I wanted to discuss some impressions and observations after week 1 of Rifting. Discussed in this video are:

Getting Acclimated

-Looking around before beginning the game experience really helps. Force the player to do this, but nest it inside of the game narrative… kind of like Halo?
-Recommended game order: Tiny Room > Tuscany > Microstar > Dear Esther > Mirror’s Edge > TF2 > Skyrim
-Stay hydrated! Water, Ginger Ale, and frequent breaks are good.

Visible Area

-Not looking at a lot of the screen at all!
-FOV : 108 – 112 feels great, depending on the game and what lens cups you are using.
-“Rift Peripheral Vision”, when you are able to see a little more looking straight than to the side. Gameplay application for this?

My best estimate of the RPV (Rift Peripheral Vision) of all three lens cups, A, B, and C:  http://i.imgur.com/iUiwRl7.jpg

Control

-Giving the player options are key
-Controller hierarchy: Hydra > Controller > Mouse & Keyboard
-Learned behavior: using the mouse/analog stick to accelerate turns. Analogous to spinning around the body?

The Game Narrative

– Camera “head bob” is not such a bad thing! In fact, I prefer it. Glide motion still makes me dizzy, even after a week of play.
– Cutscenes are probably best Half Life 2 style – let the player keep control. However, slow and steady camera movements work well. Avoid fast motion and radical rotation.
– Transitions are best when there is a fade to black or fade to white effect. Clean cuts are not as jarring as I expected them to be, but fade outs are better.
-Sound cannot be overstated. Make the environment immersive with high quality, realistic stereo sound.
-Horror implications? Rift peripheral + sound exploitation = NOPE. XD

So that pretty much covers it. This next week will be more on my own development progress with my game project. Also, I plan on a regular bi-weekly video release schedule for gameplay stuff on my YouTube Channel.

Honeymoon’s over, time to do the REALLY fun stuff – creating a world of my own!

Until the Next VR Experiment,

–Cymatic Bruce

Video  —  Posted: April 15, 2013 in VR Dev
Tags: , , , ,

Hey VR Heads!

Special Update! So my Rift arrived on Monday, and I have hardly slept since I got it. I have tried a whole lot of random software, including:

-Oculus Tiny Room
-Oculus Tuscany Demo
-Rust Ltd’s Museum of the Microstar
-UDK Maps
-TF2
-VR Player
-VBJin-OVR
-Mirror’s Edge with Virieo
-Various YouTube videos and webpages
-A SBS 3D movie in media player

And finally, my own creation!! Walking down hallways and looking around a room that I put together was surreal. Is this how architects feel?

In other news, my videos on YouTube of my first impressions have become quite popular! The immense amount of support from this community has floored me. This spirit of support and cooperation will definitely take us to the next level in VR experiences!

Back to editing video, replying to comments, and logging more hours in the Rift!

Excelsior,

–Bruce

Video  —  Posted: April 11, 2013 in VR Dev
Tags: , ,

Hey VR Heads!

Work and volunteering took up a lot of my time this week, but I managed to make some meager progress with Hydra integration in UDK. I used examples from a couple of places:

http://forums.epicgames.com/threads/937066-Razer-Hydra-Dll-Bind-Player-Input-and-Player-Controller-Ready-to-go/page2
Craig just keeps posting awesome things! I took the camera modes that he constructed from his latest release.

http://forums.epicgames.com/threads/734592-Making-a-Skeletal-Control-to-move-an-arm
This post by Comicaztaway is a tutorial for getting the arm of a skeletal mesh to move with the mouse, Little Big Planet style.

After a lot of experimentation and frustration, I arrived at what you see in the video. Nowhere close to where I want to be, but its progress nonetheless. I will make a tutorial video outlining what I did in the near future. In the mean time, here is the quick-and-dirty tutorial:

  • Make a copy of, and then edit CH_AnimHuman_Tree. Add b_RightWeapon and b_LeftWeapon to the AnimTree. Create 2 new SkelControl_CCD_IKs named RightArmIK and LeftArmIK.
  • Make the edits that Comicaztaway sugests in his post, then close and save the package.
  • Add the following code to your Pawn.uc:

var SkelControl_CCD_IK RightArmIK;
var SkelControl_CCD_IK LeftArmIK;

simulated event PostInitAnimTree(SkeletalMeshComponent SkelComp)
{
super.PostInitAnimTree(SkelComp);
RightArmIK = SkelControl_CCD_IK( mesh.FindSkelControl('RightArmIK') );
LeftArmIK = SkelControl_CCD_IK( mesh.FindSkelControl('LeftArmIK') );
}

defaultproperties
{
Begin Object class=SkeletalMeshComponent Name=SkeletalMeshComponent0
SkeletalMesh=SkeletalMesh'CH_IronGuard_MaleHG.Mesh.SK_CH_IronGuard_MaleA'
PhysicsAsset=PhysicsAsset'CH_AnimCorrupt.Mesh.SK_CH_Corrupt_Male_Physics'
Animsets(0)=AnimSet'CH_AnimHumanHG.Anims.K_AnimHuman_AimOffset'
Animsets(1)=AnimSet'CH_AnimHumanHG.Anims.K_AnimHuman_BaseMale'
AnimTreeTemplate=AnimTree'CH_AnimHuman_MyTree.AT_CH_Human'
End Object
Mesh=SkeletalMeshComponent0
Components.Add(SkeletalMeshComponent0)

Name="Default__HydraGamePawn"
}
  • Add the following code to your PlayerController.uc:

var vector RightArmLocation;
var vector LeftArmLocation;
var HydraGamePawn Utp;
var HydraGamePlayerInput Hgp;

// function for SkelControl movement.
function UpdateRotation(float DeltaTime)
{
Hgp = HydraGamePlayerInput(PlayerInput); // gives us access to the Hydra variables
Utp = HydraGamePawn(Pawn); // this simply gets our pawn so we can then point to our SkelControl

// assigns vector RightArmLocation to the position of the Right Hydra Wand.
RightArmLocation.Z = Pawn.Location.Z + Hgp.RightHandPosition.Z;
RightArmLocation.Y = Pawn.Location.Y - 200 - Hgp.RightHandPosition.Y;
RightArmLocation.X = Pawn.Location.X - 400 - Hgp.RightHandPosition.X;
Utp.RightArmIK.EffectorLocation = RightArmLocation;

// assigns vector LeftArmLocation to the position of the Left Hydra Wand.
LeftArmLocation.Z = Pawn.Location.Z + Hgp.LeftHandPosition.Z;
LeftArmLocation.Y = Pawn.Location.Y - 400 - Hgp.LeftHandPosition.Y;
LeftArmLocation.X = Pawn.Location.X - 400 - Hgp.LeftHandPosition.X;
Utp.LeftArmIK.EffectorLocation = LeftArmLocation;

// Optional log feed, so you can see the number values and decide how to tweak the assignments above.
`log("RightArmIK.EffectorLocation Value is :"$Utp.RightArmIK.EffectorLocation);

}

I have weird numbers in there to offset position based on how I have my Hydra situated on my desk. The base station is off to my right. This solution is brute force and is not at all flexible, but may serve as a jump-off point for someone out there.

I will post the full files to GitHub sometime tomorrow, for now I have to get some sleep.

Oh yeah, on other thing: my Rift is due to arrive tomorrow! Next week’s video will include impressions and direct feeds if I can swing it.

Excelsior,

–Bruce

Video  —  Posted: April 8, 2013 in Hydra support in UDK, VR Dev
Tags: , , ,

Hey VR Heads!

So, this past week has been lots of random tutorials and reading the documentation in the newly opened Oculus Developer Center. Not a whole lot new to show off, but I definitely feel like I am making progress!

I got crouch working with the Hydra. Yet again, UDK is simpler that what I make it out to be. No need for Pawn.ShouldCrouch(bool bCrouch) or StartCrouch(float HeightOffset). Just use bDuck. Here’s the code from my HydraGamePlayerController.uc:

function LeftTriggerPress()
{	
if(bDuck==0) bDuck = 1;
}

function LeftTriggerRelease()
{	
if(bDuck==1) bDuck=0;
}

Also, I have been slowly but steadily learning more about the UDK editor. Kismet and Matinee are not terribly intuitive, but I am getting the hang of it.

Finally, after several recommendations, I ended up watching the anime series Sword Art Online on CrunchyRoll. It is a really cool show about gamers stuck in a VRMMO. The battle scenes and story were pretty fantastic.
I was impressed with how they presented the player UI in the show. It has a really clean design, and is gesture based. You can see an example here (skip ahead to 8:45):

Also in this vid (skip ahead to 5:52 and 18:45):

I began investigating how I would do such a thing in UDK. As it turns out, Scaleform has 3D UI functionality in UDK! Awesome! I have no idea how the layering of 2D objects will look in the Rift, but I am going to attempt to throw together a UI mock up that is similar to SAO.

Other than that, I am still working on binding the arms/hands of a Pawn to the position of the Hydra controllers. I have been slowly working through the info on this page: http://udn.epicgames.com/Three/UsingSkeletalControllers.html
Once I have that done, I will put together a comprehensive tutorial for adding Hydra support to UDK on a separate page, so future devs don’t have to go digging through blog posts.

Hoping to receive my dev kit this week!

Excelsior,

–Bruce

Video  —  Posted: April 1, 2013 in Hydra support in UDK, VR Dev
Tags: , , ,

Hey VR Heads!

So most of this week was spent learning how to make static meshes in Blender. Blender is complex – definitely not the “jump in and push buttons” type of program. After poking around a bit, I found a great tutorial that was highly recommended:

Blender 3D: From Noob to Pro (wikibook)

I am in the beginning of Unit 2, and I was able to put together the stuff you see in the video above. Not bad. 😀

The UDK tutorials from The New Boston are also fantastic:

The New Boston’s UDK Tutorial playlist

A lot of great knowledge and step-by-step walkthrough for the UDK Editor, Kismet, and Matinee.

Finally, I was able to get some buttons on the Hydra linked to in game actions! If you are using Craig’s source that I posted in part 3.5, you simply need to add Pawn instance functions (or whatever else you want) within the PlayerController class. A list of Pawn instance fuctions is here:

UDK List of Pawn Instance Functions

Here are some examples I was able to get working:

function RightTriggerPress()
{
Pawn.StartFire(1);
}

function RightTriggerRelease()
{
Pawn.StopFire(1);
}

function RightBumperPress()
{
Pawn.StartFire(0);
}

function RightBumperRelease()
{
Pawn.StopFire(0);
}

function RightB1Press()
{
Pawn.DoJump(true);
}

StartFire and StopFire need a byte argument (number between 0-255). What firing type each number value corresponds to is up to the weapon. By default, 0 = primary fire and 1 = alternate fire.

Other than that, I changed the AimMode variable within PlayerInput to 2, which allows the movement of the right Hydra wand to control looking around. It feels pretty nice so far. I also slapped together a Pawn file that would silence the footsteps in game. Those footsteps are loud, and ruin my videos! XD

That about wraps it up. Look forward to the hallway getting fancier and fancier!

Excelsior,

–Bruce

Video  —  Posted: March 25, 2013 in Blender3D, Hydra support in UDK, VR Dev
Tags: , , , ,

Hey VR Heads!

Here is a quick video featuring the ugliest Star Trek hallway ever. XD The Rift dev kit is coming soon, so I wanted to make sure I had a Holodeck to walk into when it arrives. I used the UDK editor to build everything, but I think I will try using Blender to create some better art.

Excelsior,

Bruce

Video  —  Posted: March 18, 2013 in VR Dev
Tags: , , , , ,