Work Blog - JeffR

392 posts Page 11 of 40
Posts: 55
Joined: Tue Apr 14, 2015 5:02 am
by SqHd » Fri Mar 10, 2017 3:44 am
User avatar
: Btw, did you get the audio working with the RPG dialog?

Another feature on my wish list for that resource is NPCs that you can talk to that also have the ability to walk around or follow a path / nav.
Steering Committee
Steering Committee
Posts: 932
Joined: Tue Feb 03, 2015 9:49 pm
by JeffR » Mon Mar 13, 2017 7:46 am
@ SqHd Not yet. It was pretty much a 'lets get this sucker working' first pass.

The good news is, because it's the module system and does some namespace function override trickery, you can just drop it in and it'll work with whatever AI is running, as per the video. The guard AI module implements their behavior, and the RPG dialog does the, well, RPG Dialog.

Obviously a more tightly implemented system would see different reactions between friendly and unfriendly AI, and more ideally a more custom AI thought solution so townsfolk will go to waypoints or whatnot to simulate a day-to-day. Not particularly hard behaviors to implement, but a bit past the scope of the initial 'lets see if this works at all' ;)

The longer term goal would be to hook both AI and the RPG Dialog stuff to the neat incoming Web/Node graph interface for doing up state machines. I think the RPG Dialog one would get a customized one for setting text for each dialog 'state', idle animations to play during them, yada yada. But the idea would be skipping out on any weird, complicated text interface and just being able to smash out a web graph tree for the dialog flow to make it lightning fast to make AI talk. It'd also be a good test for tools and custom editors that package in with a module, and finding out needs/wants to make that a super smooth system that's easy to use.

Same for AI behavior. Being able to slam out an AI state machine in a short time with a visual interface and drop it on a guy and they just GO would drasticaly simplify the workflow on that end as well.

Meanwhile, took about 2 hours before bed tonight to jam on something that's been annoying me for a bit:

Drag-and-Drop asset usage. In the video you see shape assets being D-n-D'd onto the main editor view to spawn an Entity with the mesh component, and the Shape Asset field on the mesh component on an entity in the inspector to assign the shape there as well.
Obviously pretty rough-cut, but the idea proved pretty simple to get basics working. The ideal would also see materials/images being able to be dropped on anything with a valid rendering component, and - via raycast testing to find the contact surface - able to quickly drop a material onto an object's surface in the editor view to apply the material to a mesh. Or obviously drop it onto the material inspector field to apply for cases where it may be harder to hit the right surface, or want of explicit control. Sorta like a reverse eyedropper.
This, and my talk of a Live-Tutorial mode really have me itching to implement a means to highlight gui controls with an outline or whatnot via arbitrary means. Being able to outline the ShapeAsset fields in the inspector or whatever else is a valid receiving target for this sort of thing would be a nice bit of polish that is a great bit of convenience.
Also want to have 'live dragging' in the case of the main editor view, so you can drag-and-place a mesh in one smooth action, instead of HAVING to drop and then move. Minor deal, but it would remove clicks from the editing process, which is always nice.

Also thinking of doing it for component assets onto the inspector with a selected entity to quickly add it to that entity, and other obvious ones like dropping a sound asset into the main view plops down a sound emitter, particles drop particles, etc, etc.

Because behavior like 'spawn static shape' can infer a lot of things to a lot of people, I'm thinking we'll want some kind of config for dictating what would be the spawning behavior in the video's example case. Some obvious components are, well, obvious, like the Mesh Component, and a Collision Component. Some things could be inferred from the inbound asset, like if the mesh has animations associated to it, add an Animation Component, but from there, interests may diverge project-to-project, or just what stage of editing the map.

So having some editor setting to assign a GameObject for what to spawn may be a useful means of overriding with custom behavior if needbe, or whatnot. Something to mull on.

Besides that, been drafting up some initial documentation for the wiki on getting started with the new Base Game template, and also some docs on how to convert existing projects, as well as looking at beginning to port my writings on modules/assets to the wiki to better consolidate. Hoping to get that up tomorrow, but it's a fair bit to write and document with images and the like. so we'll see.
Steering Committee
Steering Committee
Posts: 932
Joined: Tue Feb 03, 2015 9:49 pm
by JeffR » Thu Mar 16, 2017 6:06 am
Been crunching on documentation for the BaseGame template - both starting a new project with it or converting an existing one - on the wiki.

There's a lot to cover, including documenting the modules and assets stuff in detail, so it's taking a bit, but you can scope out the in-progress work so far here: ... e-template

Plan is to cover:
  • Creating a brand new project with the BaseGame template and a walkthrough of the directory layout
  • Dropping in an existing module to see how modules can interact and automatically load to bring content into your project
  • Creating a new module from scratch
  • Everything pertaining to the modules system
  • Everything pertaining to the assets system
  • Porting your existing project to the BaseGame template and what needs to be changed to bring it up to speed(this will also see updates as we shift to PBR, the Entity/Component system take over, and anything else that'll be revelvent to keeping your project up to date with major changes to help streamline the porting process)
As a fun aside, it broke at some point, so I need to fix it, but I'll have a contexted documentation pop-up entry in a lot of the RMB popup menus for 'Jump to Documentation'. The idea being that if you, say RMB click on a MeshComponent rollout in the inspector for an entity, or on a ImageAsset or what have you and click it, it'll jump straight to the wiki documentation detailing all the specifics for that particular thing.
Idea being to cut out as much manual searching and drudging through documentation as possible to jump you straight to what you need to know for the thing you're wondering about at the time.

This should help immensely with the learning process, and remembering details/functionality on things you don't often utilize.
Posts: 209
Joined: Wed Jul 01, 2015 10:33 am
by Chelaru » Thu Mar 16, 2017 3:53 pm
The part with the jump to wiki documentation will be nice.
Steering Committee
Steering Committee
Posts: 932
Joined: Tue Feb 03, 2015 9:49 pm
by JeffR » Wed Apr 05, 2017 8:03 am
Been busy crunching on documentation, testing various things, and a dabble of other random bits.

One thing that came up today in irc, was Tim-MGT was talking about Unity having a callstack dump in the event of a crash, so you can at least see what the game was doing leading up to it, which helps debug.

I thought that was a really smart thing to do, so we were talking about it some, and he had a few other ideas I figured I'd take a stab at as well.

First was a suggestion he made that isn't major, but a quality of life thing, especially when you're just looking for warnings/errors in the console log, but I added some buttons to filter out message types:


At minimum, the filter buttons update their text any time a new console message is output to the viewer, so it can at least provide a quick-look of how many errors and warnings you're getting, let alone being able to filter them out to quickly see what's going wrong and where.

The other was the original kicker for the discussion: callstack dumps. I knew T3D already supported spitting out the console callstack, because Torsion and other torquescript editors could display the callstack. It was just a matter of figuring out how to do it. It only took an hour or two and I got it working fairly well.

However, the script only ever tells part of the story of a crash(and usually you have to screw up HARD for the script to be the actual cause of a crash, it's definitely not a normal thing). Which meant that to really maximize it's use as a debug utility, we needed to dump the C++ callstack as well.

Well, I did some digging, and while not surprising, it is nice that each platform has their own standard functions for fetching the callstack of an application. I got the windows side working tonight. The example console.log with the test stack dump:

Code: Select all

//-------------------------- 4/5/2017 -- 00:35:03 ----- Warning: forcing the Torque profiler thread to run only on cpu 1. Processor Init: Unknown x86 Compatible, ~3.51 Ghz HT detected MP detected [3 cores, 6 logical, 1 physical] Math Init: Installing Standard C extensions Installing Assembly extensions Initializing platform... Input Init: Done DebugDrawer Enabled! GFX Init: Null device found Direct 3D (version 11.x) device found Direct 3D (version 9.x) device found Direct 3D (version 9.x) device found OpenGL device found GFXStringEnumTranslate: Unassigned value in GFXStringTextureFormat: 22 GFXStringEnumTranslate: Unassigned value in GFXStringTextureFormat: 23 Console trace disabled. Executing core/main.cs. Executing core/helperFunctions.cs. Executing core/profiles.cs. C:/Users/Reno/Documents Executing C:/Users/Reno/Documents/DEV/preferences/clientPrefs.cs. Executing core/globals.cs. Executing core/canvas.cs. Executing core/cursor.cs. Executing core/renderManager.cs. Executing core/lighting.cs. Executing core/audio.cs. Executing core/sfx/audioAmbience.cs. Executing core/sfx/audioData.cs. Executing core/sfx/audioDescriptions.cs. Executing core/sfx/audioEnvironments.cs. Executing core/sfx/audioStates.cs. Executing core/parseArgs.cs. Executing core/gfxData/commonMaterialData.cs. Executing core/gfxData/shaders.cs. Executing core/gfxData/terrainBlock.cs. Executing core/gfxData/water.cs. Executing core/gfxData/scatterSky.cs. Executing core/gfxData/clouds.cs. Executing core/postFx.cs. Executing core/oculusVR.cs. --------- Parsing Arguments --------- Attempting to create GFX device: NVIDIA GeForce GTX 950 (D3D9) [\\.\DISPLAY1] Device created, setting adapter and enumerating modes Cur. D3DDevice ref count=1 Pix version detected: 3.000000 Vert version detected: 3.000000 Maximum number of simultaneous samplers: 16 Number of simultaneous render targets: 4 Hardware occlusion query detected: Yes Using Direct3D9Ex: No WMIVideoInfo: DxDiag initialized Initializing GFXCardProfiler (D3D9) o Chipset : 'NVIDIA' o Card : 'NVIDIA GeForce GTX 950' o Version : '' o VRAM : 1970 MB - Scanning card capabilities... GFXCardProfiler (D3D9) - Setting capability 'autoMipMapLevel' to 1. GFXCardProfiler (D3D9) - Setting capability 'maxTextureWidth' to 16384. GFXCardProfiler (D3D9) - Setting capability 'maxTextureHeight' to 16384. GFXCardProfiler (D3D9) - Setting capability 'maxTextureSize' to 16384. GFXCardProfiler (D3D9) - Setting capability 'lerpDetailBlend' to 1. GFXCardProfiler (D3D9) - Setting capability 'fourStageDetailBlend' to 1. GFXCardProfiler (D3D9) - Setting capability 'independentMrtBitDepth' to 1. - Loading card profiles... - Loaded card profile core/gfxprofile/D3D9.cs - Loaded card profile core/gfxprofile/D3D9.NVIDIA.cs <input> (0): Unable to find function GFXCardProfiler::getVersion - No card profile core/gfxprofile/D3D9.NVIDIA.NVIDIAGeForceGTX950.cs exists - No card profile core/gfxprofile/D3D9.NVIDIA.NVIDIAGeForceGTX950..cs exists -------------- Attempting to set resolution to "1024 768 false 32 60 4" Accepted Mode: --Resolution : 1024 768 --Full Screen : No --Bits Per Pixel : 32 --Refresh Rate : 60 --AA TypeXLevel : 4 -------------- GFXPCD3D9Device::reset - depthstencil a500258 has 2 ref's --- Resetting D3D Device --- GFXPCD3D9Device::reset - depthstencil 66cfdf8 has 2 ref's --- Resetting D3D Device --- Executing core/console/main.cs. Executing core/console/profiles.cs. Executing core/console/console.gui. sfxStartup... SFXSystem::createDevice - created OpenAL device 'OpenAL Soft' Provider: OpenAL Device: OpenAL Soft Hardware: No Max Buffers: 16 UDP initialized on ipv4 IP: Executing tools/main.cs. -------------------------------------------------------------------------------- Module Manager: Started scanning 'D:/gamedev/T3DMIT/DEV/My Projects/DEV/game/data'... Module Manager: Registering: 'D:/gamedev/T3DMIT/DEV/My Projects/DEV/game/data/clientServer/ClientServer.module' [ ID='ClientServer', VersionId='1', BuildId='0', Description='Default module for the game.' ]. Module Manager: Registering: 'D:/gamedev/T3DMIT/DEV/My Projects/DEV/game/data/FPSGameplay/FPSGameplay.module' [ ID='FPSGameplay', VersionId='1', BuildId='0', Description='Starter module for FPS gameplay.' ]. Module Manager: Registering: 'D:/gamedev/T3DMIT/DEV/My Projects/DEV/game/data/ui/UI.module' [ ID='UI', VersionId='1', BuildId='0', Description='Module that implements the menus for the game.' ]. Module Manager: Finished scanning 'D:/gamedev/T3DMIT/DEV/My Projects/DEV/game/data'. -------------------------------------------------------------------------------- Module Manager: Loading group 'Game': Module Manager: Group 'Game' and its dependencies is comprised of the following '3' module(s): > module Id 'ClientServer' at version Id '1': > module Id 'UI' at version Id '1': > module Id 'FPSGameplay' at version Id '1': -------------------------------------------------------------------------------- Module Manager: Loading group 'Game' : module Id 'ClientServer' at version Id '1' in group 'Game' using the script file 'D:/gamedev/T3DMIT/DEV/My Projects/DEV/game/data/clientServer/ClientServer.cs'. Adding path expando of 'ClientServer' as 'D:/gamedev/T3DMIT/DEV/My Projects/DEV/game/data/clientServer'. Executing D:/gamedev/T3DMIT/DEV/My Projects/DEV/game/data/clientServer/ClientServer.cs. --------- Initializing Directory: scripts --------- Executing data/clientServer/scripts/client/client.cs. Executing data/clientServer/scripts/server/server.cs. --------- Initializing DEV: Server Scripts --------- C:/Users/Reno/Documents Executing C:/Users/Reno/Documents/DEV/preferences/serverPrefs.cs. Executing data/clientServer/scripts/server/audio.cs. Executing data/clientServer/scripts/server/commands.cs. Executing data/clientServer/scripts/server/kickban.cs. Executing data/clientServer/scripts/server/message.cs. Executing data/clientServer/scripts/server/levelDownload.cs. Executing data/clientServer/scripts/server/levelLoad.cs. Executing data/clientServer/scripts/server/levelInfo.cs. Executing data/clientServer/scripts/server/connectionToClient.cs. --------- Initializing DEV: Client Scripts --------- Executing data/clientServer/scripts/client/message.cs. Executing data/clientServer/scripts/client/connectionToServer.cs. Executing data/clientServer/scripts/client/levelDownload.cs. Executing data/clientServer/scripts/client/levelLoad.cs. C:/Users/Reno/Documents Executing C:/Users/Reno/Documents/DEV/preferences/clientPrefs.cs. Executing core/images/materials.cs. Executing data/FPSGameplay/art/decals/materials.cs. Executing data/FPSGameplay/art/environment/materials.cs. Executing data/FPSGameplay/art/lights/materials.cs. Executing data/FPSGameplay/art/misc/materials.cs. Executing data/FPSGameplay/art/particles/ribbon/materials.cs. Executing data/FPSGameplay/art/roads/materials.cs. Executing data/FPSGameplay/art/shapes/materials.cs. Executing data/FPSGameplay/art/shapes/actors/common/materials.cs. Executing data/FPSGameplay/art/shapes/actors/Soldier/materials.cs. Executing data/FPSGameplay/art/shapes/actors/Soldier/FP/materials.cs. Executing data/FPSGameplay/art/shapes/Cheetah/materials.cs. Executing data/FPSGameplay/art/shapes/cube/materials.cs. Executing data/FPSGameplay/art/shapes/items/kit/materials.cs. Executing data/FPSGameplay/art/shapes/station/materials.cs. Executing data/FPSGameplay/art/shapes/teleporter/materials.cs. Executing data/FPSGameplay/art/shapes/trees/defaulttree/materials.cs. Executing data/FPSGameplay/art/shapes/weapons/Grenade/materials.cs. Executing data/FPSGameplay/art/shapes/weapons/Lurker/materials.cs. Executing data/FPSGameplay/art/shapes/weapons/ProxMine/materials.cs. Executing data/FPSGameplay/art/shapes/weapons/Ryder/materials.cs. Executing data/FPSGameplay/art/shapes/weapons/shared/materials.cs. Executing data/FPSGameplay/art/shapes/weapons/Turret/materials.cs. Executing data/FPSGameplay/art/skies/Blank_sky/materials.cs. Executing data/FPSGameplay/art/skies/Desert_Sky/materials.cs. Executing data/FPSGameplay/art/skies/night/materials.cs. Executing data/FPSGameplay/art/terrains/materials.cs. Executing tools/base/images/materials.cs. -------------------------------------------------------------------------------- Module Manager: Loading group 'Game' : module Id 'UI' at version Id '1' in group 'Game' using the script file 'D:/gamedev/T3DMIT/DEV/My Projects/DEV/game/data/ui/UI.cs'. Adding path expando of 'UI' as 'D:/gamedev/T3DMIT/DEV/My Projects/DEV/game/data/ui'. Executing D:/gamedev/T3DMIT/DEV/My Projects/DEV/game/data/ui/UI.cs. -------------- Attempting to set resolution to "1024 768 false 32 60 4" Accepted Mode: --Resolution : 1024 768 --Full Screen : No --Bits Per Pixel : 32 --Refresh Rate : 60 --AA TypeXLevel : 4 -------------- GFXPCD3D9Device::reset - depthstencil 66cfdf8 has 2 ref's --- Resetting D3D Device --- GFXPCD3D9Device::reset - depthstencil 66cfdf8 has 2 ref's --- Resetting D3D Device --- Executing data/ui/scripts/datablocks/guiSounds.cs. Loading SFX: data/ui/sound/buttonClick (2 channels, 44 kHz, 0.09 sec, 16 kb) Loading SFX: data/ui/sound/buttonHover (2 channels, 44 kHz, 0.23 sec, 39 kb) Executing data/ui/scripts/profiles.cs. Executing data/ui/scripts/guis/mainMenu.gui. Executing tools/gui/profiles.ed.cs. Executing data/ui/scripts/guis/chooseLevelDlg.gui. Executing data/ui/scripts/guis/joinServerMenu.gui. Executing data/ui/scripts/guis/loadingGui.gui. Executing data/ui/scripts/guis/optionsMenu.gui. Executing data/ui/scripts/guis/pauseMenu.gui. Executing data/ui/scripts/guis/remapDlg.gui. Executing data/ui/scripts/guis/remapConfirmDlg.gui. Executing data/ui/scripts/guis/profiler.gui. Executing data/ui/scripts/guis/netGraphGui.gui. Executing data/ui/scripts/guis/FileDialog.gui. Executing data/ui/scripts/guis/guiMusicPlayer.gui. Executing data/ui/scripts/guis/startupGui.gui. Executing data/ui/scripts/chooseLevelDlg.cs. Executing data/ui/scripts/optionsList.cs. Executing data/ui/scripts/optionsMenu.cs. Executing data/ui/scripts/graphicsMenu.cs. Executing data/ui/scripts/controlsMenu.cs. Executing data/ui/scripts/chooseLevelDlg.cs. Executing data/ui/scripts/mainMenu.cs. Executing data/ui/scripts/joinServerMenu.cs. Executing data/ui/scripts/pauseMenu.cs. Executing data/ui/scripts/messageBoxes.cs. Linux Compatibility Warning: messageBoxOK.gui != messageBoxOk.gui Linux Compatibility Warning: messageBoxOK.gui != messageBoxOk.gui Executing data/ui/scripts/guis/messageBoxOk.gui. Executing data/ui/scripts/guis/messageBoxYesNo.gui. Executing data/ui/scripts/help.cs. Executing data/ui/scripts/cursors.cs. Executing data/ui/scripts/profiler.cs. Executing data/ui/scripts/FileDialog.cs. Linux Compatibility Warning: guiTreeViewCtrl.cs != GuiTreeViewCtrl.cs Linux Compatibility Warning: guiTreeViewCtrl.cs != GuiTreeViewCtrl.cs Executing data/ui/scripts/GuiTreeViewCtrl.cs. Executing data/ui/scripts/guiMusicPlayer.cs. Executing data/ui/scripts/startupGui.cs. -------------------------------------------------------------------------------- Module Manager: Loading group 'Game' : module Id 'FPSGameplay' at version Id '1' in group 'Game' using the script file 'D:/gamedev/T3DMIT/DEV/My Projects/DEV/game/data/FPSGameplay/FPSGameplay.cs'. Adding path expando of 'FPSGameplay' as 'D:/gamedev/T3DMIT/DEV/My Projects/DEV/game/data/FPSGameplay'. Executing D:/gamedev/T3DMIT/DEV/My Projects/DEV/game/data/FPSGameplay/FPSGameplay.cs. Executing data/FPSGameplay/scripts/server/aiPlayer.cs. Executing data/FPSGameplay/scripts/server/camera.cs. Executing data/FPSGameplay/scripts/server/chat.cs. Executing data/FPSGameplay/scripts/server/cheetah.cs. Executing data/FPSGameplay/scripts/server/commands.cs. Executing data/FPSGameplay/scripts/server/centerPrint.cs. Executing data/FPSGameplay/scripts/server/deathMatchGame.cs. Executing data/FPSGameplay/scripts/server/health.cs. Executing data/FPSGameplay/scripts/server/inventory.cs. Executing data/FPSGameplay/scripts/server/item.cs. Executing data/FPSGameplay/scripts/server/player.cs. Executing data/FPSGameplay/scripts/server/projectile.cs. Executing data/FPSGameplay/scripts/server/proximityMine.cs. Executing data/FPSGameplay/scripts/server/radiusDamage.cs. Executing data/FPSGameplay/scripts/server/shapeBase.cs. Executing data/FPSGameplay/scripts/server/spawn.cs. Executing data/FPSGameplay/scripts/server/teleporter.cs. Executing data/FPSGameplay/scripts/server/triggers.cs. Executing data/FPSGameplay/scripts/server/turret.cs. Executing data/FPSGameplay/scripts/server/vehicle.cs. Executing data/FPSGameplay/scripts/server/vehicleWheeled.cs. Executing data/FPSGameplay/scripts/server/VolumetricFog.cs. Executing data/FPSGameplay/scripts/server/weapon.cs. Executing data/FPSGameplay/scripts/server/physicsShape.cs. Executing data/FPSGameplay/scripts/client/gameProfiles.cs. Executing data/FPSGameplay/scripts/client/default.keybinds.cs. C:/Users/Reno/Documents Executing data/FPSGameplay/scripts/client/inputCommands.cs. Executing data/FPSGameplay/scripts/gui/chatHud.gui. Executing data/FPSGameplay/scripts/gui/playerList.gui. Executing data/FPSGameplay/scripts/gui/playGui.gui. Executing data/FPSGameplay/scripts/gui/hudlessGui.gui. Executing data/FPSGameplay/scripts/client/playGui.cs. Executing data/FPSGameplay/scripts/client/hudlessGui.cs. Executing data/FPSGameplay/scripts/client/message.cs. Executing data/FPSGameplay/scripts/client/chatHud.cs. Executing data/FPSGameplay/scripts/client/clientCommands.cs. Executing data/FPSGameplay/scripts/client/messageHud.cs. Executing data/FPSGameplay/scripts/client/playerList.cs. Executing data/FPSGameplay/scripts/client/centerPrint.cs. Executing data/FPSGameplay/scripts/client/recordings.cs. Executing data/FPSGameplay/scripts/client/screenshot.cs. -------------------------------------------------------------------------------- Module Manager: Finish loading '3' module(s) for group 'Game'. -------------------------------------------------------------------------------- Initializing Lighting Systems Executing core/lighting/advanced/init.cs. Executing core/lighting/advanced/shaders.cs. Executing core/lighting/advanced/deferredShading.cs. Executing core/lighting/basic/init.cs. Executing core/lighting/basic/shadowFilter.cs. Executing core/lighting/shadowMaps/init.cs. C:/Users/Reno/Documents Executing C:/Users/Reno/Documents/DEV/preferences/clientPrefs.cs. -------------- Attempting to set resolution to "1024 768 false 32 60 4" Accepted Mode: --Resolution : 1024 768 --Full Screen : No --Bits Per Pixel : 32 --Refresh Rate : 60 --AA TypeXLevel : 4 -------------- GFXPCD3D9Device::reset - depthstencil 66cfdf8 has 2 ref's --- Resetting D3D Device --- GFXPCD3D9Device::reset - depthstencil 66cfd18 has 2 ref's --- Resetting D3D Device --- Executing core/postFX/postFxManager.gui. Executing core/postFX/caustics.cs. Executing core/postFX/chromaticLens.cs. Executing core/postFX/default.postfxpreset.cs. Executing core/postFX/dof.cs. Executing core/postFX/edgeAA.cs. Executing core/postFX/flash.cs. Executing core/postFX/fog.cs. Executing core/postFX/fxaa.cs. Executing core/postFX/GammaPostFX.cs. Executing core/postFX/glow.cs. Executing core/postFX/hdr.cs. Executing core/postFX/lightRay.cs. Executing core/postFX/MLAA.cs. Executing core/postFX/MotionBlurFx.cs. Executing core/postFX/ovrBarrelDistortion.cs. Executing core/postFX/postFxManager.gui.cs. Executing core/postFX/postFxManager.gui.settings.cs. Executing core/postFX/postFxManager.persistance.cs. Executing core/postFX/ssao.cs. Executing core/postFX/turbulence.cs. Executing core/postFX/vignette.cs. Engine initialized... Started up in 3.27 seconds... Window focus status changed: focus: 1 AntiAliasing has been disabled; it is not compatible with AdvancedLighting. ==>barf(1); Dumping Console Callstack now: File: "<none>" Line: 0 Function: "" File: "core/console/main.cs" Line: 68 Function: "ConsoleEntry::eval" File: "<none>" Line: 0 Function: "" Finished Dumping Console Callstack Dumping Engine Callstack now: At dumpCallstack in d:\gamedev\t3dmit\dev\engine\source\platform\platformassert.cpp: line: 238: address: 0x3F5E81E0 At cf_barf in d:\gamedev\t3dmit\dev\engine\source\platform\platformassert.cpp: line: 275: address: 0x3F5E8760 At CodeBlock::exec in d:\gamedev\t3dmit\dev\engine\source\console\compiledeval.cpp: line: 1960: address: 0x3F3F1110 At CodeBlock::compileExec in d:\gamedev\t3dmit\dev\engine\source\console\codeblock.cpp: line: 672: address: 0x3F3EEB80 At Con::evaluate in d:\gamedev\t3dmit\dev\engine\source\console\console.cpp: line: 1473: address: 0x3F401DE0 At _fnevalimpl in d:\gamedev\t3dmit\dev\engine\source\console\consolefunctions.cpp: line: 2375: address: 0x3F415B30 At engineAPI::detail::ThunkHelpers<1,char const * __ptr64,char const * __ptr64>::dispatchHelper<0> in d:\gamedev\t3dmit\dev\engine\source\console\engineapi.h: line: 561: address: 0x3F312230 At _EngineConsoleThunk<1,char const * __ptr64 __cdecl(char const * __ptr64)>::thunk in d:\gamedev\t3dmit\dev\engine\source\console\engineapi.h: line: 606: address: 0x3F312ED0 At _evalcaster in d:\gamedev\t3dmit\dev\engine\source\console\consolefunctions.cpp: line: 2373: address: 0x3F415BB0 At CodeBlock::exec in d:\gamedev\t3dmit\dev\engine\source\console\compiledeval.cpp: line: 1903: address: 0x3F3F1110 At CodeBlock::exec in d:\gamedev\t3dmit\dev\engine\source\console\compiledeval.cpp: line: 1850: address: 0x3F3F1110 At CodeBlock::compileExec in d:\gamedev\t3dmit\dev\engine\source\console\codeblock.cpp: line: 672: address: 0x3F3EEB80 At Con::evaluate in d:\gamedev\t3dmit\dev\engine\source\console\console.cpp: line: 1473: address: 0x3F401DE0 At GuiControl::evaluate in d:\gamedev\t3dmit\dev\engine\source\gui\core\guicontrol.cpp: line: 2477: address: 0x3F86D870 At GuiControl::execAltConsoleCallback in d:\gamedev\t3dmit\dev\engine\source\gui\core\guicontrol.cpp: line: 2498: address: 0x3F86F190 At GuiTextEditCtrl::dealWithEnter in d:\gamedev\t3dmit\dev\engine\source\gui\controls\guitexteditctrl.cpp: line: 1200: address: 0x3F7FFA40 At GuiConsoleEditCtrl::onKeyDown in d:\gamedev\t3dmit\dev\engine\source\gui\controls\guiconsoleeditctrl.cpp: line: 140: address: 0x3F77AF60 At GuiCanvas::processKeyboardEvent in d:\gamedev\t3dmit\dev\engine\source\gui\core\guicanvas.cpp: line: 666: address: 0x3F8502A0 At GuiCanvas::processInputEvent in d:\gamedev\t3dmit\dev\engine\source\gui\core\guicanvas.cpp: line: 617: address: 0x3F856340 At WindowInputGenerator::generateInputEvent in d:\gamedev\t3dmit\dev\engine\source\windowmanager\windowinputgenerator.cpp: line: 114: address: 0x3F59D320 At WindowInputGenerator::handleKeyboard in d:\gamedev\t3dmit\dev\engine\source\windowmanager\windowinputgenerator.cpp: line: 353: address: 0x3F59CF40 At fastdelegate::FastDelegate4<unsigned int,unsigned int,unsigned int,unsigned short,void>::operator() in d:\gamedev\t3dmit\dev\engine\source\core\util\fastdelegate.h: line: 1244: address: 0x3F611C20 At Signal<void __cdecl(unsigned int,unsigned int,unsigned int,unsigned short)>::trigger in d:\gamedev\t3dmit\dev\engine\source\core\util\tsignal.h: line: 723: address: 0x3F612040 At Journal::Call<Signal<void __cdecl(unsigned int,unsigned int,unsigned int,unsigned short)>,unsigned int,unsigned int,unsigned int,unsigned short> in d:\gamedev\t3dmit\dev\engine\source\core\util\journal\journal.h: line: 628: address: 0x3F611940 At JournaledSignal<void __cdecl(unsigned int,unsigned int,unsigned int,unsigned short)>::trigger in d:\gamedev\t3dmit\dev\engine\source\core\util\journal\journaledsignal.h: line: 151: address: 0x3F611E90 At PlatformWindowSDL::_triggerKeyNotify in d:\gamedev\t3dmit\dev\engine\source\windowmanager\sdl\sdlwindow.cpp: line: 508: address: 0x40189620 At PlatformWindowSDL::_processSDLEvent in d:\gamedev\t3dmit\dev\engine\source\windowmanager\sdl\sdlwindow.cpp: line: 558: address: 0x401891A0 At PlatformWindowManagerSDL::_process in d:\gamedev\t3dmit\dev\engine\source\windowmanager\sdl\sdlwindowmgr.cpp: line: 270: address: 0x40191B80 At fastdelegate::FastDelegate0<void>::operator() in d:\gamedev\t3dmit\dev\engine\source\core\util\fastdelegate.h: line: 904: address: 0x3F3F9140 At Signal<void __cdecl(void)>::trigger in d:\gamedev\t3dmit\dev\engine\source\core\util\tsignal.h: line: 651: address: 0x3F3FACF0 At Process::processEvents in d:\gamedev\t3dmit\dev\engine\source\core\util\journal\process.cpp: line: 101: address: 0x3F521890 At StandardMainLoop::doMainLoop in d:\gamedev\t3dmit\dev\engine\source\app\mainloop.cpp: line: 621: address: 0x3F313C10 At TorqueMain in d:\gamedev\t3dmit\dev\engine\source\main\main.cpp: line: 315: address: 0x3FE6C150 At run in d:\gamedev\t3dmit\dev\engine\source\platformwin32\winwindow.cpp: line: 337: address: 0x401E9E90 At WinMain in d:\gamedev\t3dmit\dev\engine\source\platformwin32\winwindow.cpp: line: 395: address: 0x401E9B10 At invoke_main in f:\dd\vctools\crt\vcstartup\src\startup\exe_common.inl: line: 99: address: 0x408CE280 At __scrt_common_main_seh in f:\dd\vctools\crt\vcstartup\src\startup\exe_common.inl: line: 253: address: 0x408CE050 At __scrt_common_main in f:\dd\vctools\crt\vcstartup\src\startup\exe_common.inl: line: 296: address: 0x408CE030 At WinMainCRTStartup in f:\dd\vctools\crt\vcstartup\src\startup\exe_winmain.cpp: line: 17: address: 0x408CE2C0 Finished Dumping Engine Callstack Module Manager: Cannot unload explicit module Id 'Game' as it does not exist. tools/main.cs (213): Unable to find object: 'EditorSettings' attempting to call function 'write' -------------------------------------------------------------------------------- Module Manager: Unloading group 'Game': -------------------------------------------------------------------------------- Module Manager: Unload group 'Game' with module Id 'FPSGameplay' at version Id '1' in group 'Game'. Removing path expando of 'FPSGameplay' as 'D:/gamedev/T3DMIT/DEV/My Projects/DEV/game/data/FPSGameplay'. -------------------------------------------------------------------------------- Module Manager: Unload group 'Game' with module Id 'UI' at version Id '1' in group 'Game'. Removing path expando of 'UI' as 'D:/gamedev/T3DMIT/DEV/My Projects/DEV/game/data/ui'. -------------------------------------------------------------------------------- Module Manager: Unload group 'Game' with module Id 'ClientServer' at version Id '1' in group 'Game'. C:/Users/Reno/Documents Exporting server prefs... Exporting client prefs C:/Users/Reno/Documents Exporting server prefs Removing path expando of 'ClientServer' as 'D:/gamedev/T3DMIT/DEV/My Projects/DEV/game/data/clientServer'. -------------------------------------------------------------------------------- Module Manager: Finish unloading '3' module(s) for group 'Game'. -------------------------------------------------------------------------------- Cur. D3DDevice ref count=9 GFXTextureObject::dumpActiveTOs - no active TOs to dump. GFXPrimitiveBuffer::dumpActivePBs - no currently active PBs to dump. You are A-OK!
As you can see, it gets a very nicely fleshed out callstack leading up to the dump call.

From here, I need to shift this into a proper centralized location in the codebase, somewhere in the Platform namespace, and then integrate it into the assert macros, as well as rig up the app to catch the unhandled exceptions that may occur and do a dump in that event as well.
Then I just need to implement the Linux and MacOS variants of the callstack fetch function and bam! Delicious debugging info in the event ANY catastrophic failure occurs which should help a TON in figuring out what went wrong, where and why.

The other thing mentined in irc that Tim-MGT found convenient was how it would auto-upload to a cloud service, so if an end-user had a crash, it'd automatically upload to a place the developer could access it, cutting out the middleman of the end user having to know where to go to submit the failure report.

That's more involved, but there's definitely merit to the concept, so it's something I'll be pondering on going forward in order to maximize development efficiency of not just T3D, but everyone's personal projects as well.
Posts: 53
Joined: Sun Oct 25, 2015 7:36 am
by RasterRon » Fri Apr 07, 2017 3:29 am
Awesome update Jeff! :) It would also be great if you can set between errors only or both warnings and errors as engine options. I see you can only disable console logging with the current setup? ... in.cs#L178
Steering Committee
Steering Committee
Posts: 932
Joined: Tue Feb 03, 2015 9:49 pm
by JeffR » Mon Apr 10, 2017 3:25 pm
Don't remember if it's exposed, but I know there's a system for dictating what 'level' of warnings/errors to output. Exposing that as a setting if it isn't already would be useful in that regard.
Steering Committee
Steering Committee
Posts: 932
Joined: Tue Feb 03, 2015 9:49 pm
by JeffR » Tue Apr 18, 2017 6:00 am
Time for another update!

Mostly been jamming with Az in trying to get the last important bit of the PBR stuff sorted: Probes.

Not like, alien probes, but Reflection/Environmental Probes.

They're a common method of providing information of the surroundings to nearby objects when rendering, most specifically reflections which is critical for PBR, because in PBR, everything reflects. It may reflect an infinitesimal or 0 value depending on material settings, but the rules say all surfaces reflect, so there you go.

Reflections have been working decently for a while now, but it was pretty WIP and needed solidifying. It's also proven a good opportunity to do more reviewing on our lighting logic, and do some re-organization there, as needed, as well as look at having the probes pull double-duty to provide Global Illumination info.

Observe this render of PBR T3D as-is, utilizing the tried-and-true Crytek Sponza model:


It's certainly not bad, but obviously the ambient lighting is really flat, and doesn't convey the difference in lighting between the main lobby area and the 'indoor' archways.

To see what I mean, let's have a look at CryEngine utilizing the same Sponza model, to see how they light the scene with their GI in there.


As we can see, there's definitely a lot more nuance that comes into play with the lighting, especially in the 'indoor' spots.

So, obviously, that just won't do! Obviously the current flat ambient would SUFFICE, but that's not how we do 'round these parts!

So, because we already had the reflection probes that can provide, well, reflections. It made sense to let the little guys pull double-duty, and also be able to provide ambient light color information.

There'll be 2 ways to do that for now: flat color, and spherical harmonics.
Flat color will apply a flat, selected ambient color to the area in the probe's influence. It sounds similar to the regular sun-based ambient color now, but the distinction is this isn't global. It's just the area that the probe covers. So you use several probes, and you can get pretty finessed with the ambient lighting info. This is really good for artists to specifically control the ambient lighting conditions. It's more manual work, but it's got a lot of control.

The other way is Spherical Harmonics. This will take the cubemap the reflection portion of the probe is using, and convolve and encode that info as spherical harmonics data. This gives a very smooth, but compact means of passing around the ambient color data that probe can see. The cool part is, because of the voodoo that is SH, it actually contains the directional info, so if one wall is lit and the other isn't, one side of the probe's ambient color will be bright, the other dark.

It should also contain color info, via the cubemap capture(if you don't just use a static cubemap, of course), meaning if there's, say, the bright-green curtain being brightly lit, the far wall will get a hint of green due to the reflected light.

I jimmied up the suuuuper basic version of it, with some hilariously incorrect math, but I mainly just wanted to affirm that things were writing to the correct buffers, and shader parameters were being passed around correctly. So to see how it is, about after about an hour of work to add in the indirect lighting contribution to probes, here it is:

Direct Lighting only: we have some point lights sprinkled around, and the sun is pretty much directly overhead, shining light straight down onto the floor.


Indirect Lighting only: This is the combined of the probe's reflection data and flat ambient color(SH encoding isn't ready yet, so it's somewhat ugly still). It's a bit ugly because it was a quick job to assign the colors, but you can get a sense of light bouncing off the lit floor, the lit red curtain, etc.


And the Combined. Pretty dark because, again, my math is suuuper wrong, but you can see the hints of the ambient lighting actually being applied onto the walls, replicating the light bouncing off the surfaces, well away from the directly lit floor.


Obviously a good deal of work to do on it yet, especially needing to get the SH encoding in, so we can get proper directional lighting data rather than merely flat colors, but the proof of concept worked, and we'll be doing a lot to shore everything up and get some nice GI lighting in there to complement the PBR renderer. In the end, we should end out with some pretty nice lighting to work with the new pretty nice materials.
Posts: 54
Joined: Thu Jun 23, 2016 12:02 pm
by damik » Tue Apr 18, 2017 12:24 pm
It looks cool :o
Posts: 328
Joined: Tue Feb 03, 2015 10:30 pm
by Steve_Yorkshire » Tue Apr 18, 2017 5:20 pm
Very cool, Jeff. :D
392 posts Page 11 of 40

Who is online

Users browsing this forum: No registered users and 3 guests