SuperPowers for human scripters... The Render.getConfig(“XXXXXXXX”) kryptonite


#1

Hi Scripters, and Gods from HighFidelity…

@Judas informed me about the following snip:

Render.getConfig(“ToneMapping”)[“curve”]…

and i tried to search for other instances of the Render configs, i found this one:

Render.getConfig(“SecondaryCamera”)…

I tried to find documentation about all Render config superpowers variables, and all I got from docs.highfidelity.com is the following page:

https://docs.highfidelity.com/api-reference/namespaces/render#.getConfig

which essentially is giving away 0 information :frowning:

Then I went on the sources and tried to see if there is a .h of .c dealing with Render.getConfig, but nothing could I find …

So … what others values and example of their usage can we have to understand how to use Render with some other useful superhuman properties? :sunny:
image


#2

Search on github of Render.getConfig, no clue on what all these parameters are doing…

RenderMainView.Antialiasing
RenderMainView.Scattering
RenderMainView.LightClustering
RenderMainView.OpaqueRangeTimer
RenderMainView.LinearDepth
Stats
RenderMainView.DrawOpaqueDeferred
RenderMainView.SurfaceGeometry
RenderMainView.DrawViewFrustum
RenderMainView.ShadowSetup
RenderMainView.DrawShadowFrustum0
RenderMainView.AmbientOcclusion
RenderMainView.DrawSceneOctree
RenderMainView.DrawItemSelection
SpaceToRender
DebugAmbientOcclusion
RenderRenderMainView.Bloom
RenderMainView.BloomThreshold
RenderMainView.DebugBloom
RenderMainView.FadeEdit
Antialiasing
RenderMainView.DrawSelectionBounds
RenderMainView.HazeModel
SecondaryCamera
RenderMainView.JitterCam
RenderMainView.Fade
SecondaryCameraJob.ToneMapping
RenderMainView.RenderDeferredTask
OpaqueRangeTimer


#3

I suggest checking the Luci script, specially, the qml it utilizes. qml is basically qt Markup Language, and has elements of qtScript, thats a variant of JS Via ECMAScript definition.

It utilizes most Render methods out there. The documents high fidelity maintains are voefully not to date and they like wont be until they get a new documentation team.

The following is information I gathered in my notes from trying things out and checking through github:

The main part here is that you first need

Render.getConfig

Which returns a RenderTaskConfig Object, or the config it self:

So far, there are two types of “Render Configs”:

RenderMainView
SecondaryCameraJob

SecondaryCameraJob is what the Spectator Camera and Mirrors use for rendering while RenderMainView is the one your uses for rendering. You can adjust either renderer to behave differently to create, a xray camera or mirror if you want.

Then there is SecondaryCamera that Spectator Camera, Specifically the camera on part utilizes to set the position of the secondary view.

From what I can gather, both SecondaryCamera and SecondaryCameraJob are limited to a single instance, but requires more testing and investigation. It is also not available on the android builds, so if defining scripts, make sure to check if the configuration object exists in the firstplace! You can find this defintion in their source

The view it self uses the SecondaryCameraJob Render configuration, while the SecondaryCameraconfig handle’s the view’s position and direction, and render length. So remember

SecondaryCamera != SecondaryCameraJob 

But with this many options, things get easily very complicated, So lets focus exploring just one to get an idea how they work:


So typing out

 Render.getConfig("RenderMainView") 

Gives us an odd object, does not show anything and the helper doesnt autofill anything in the console, so lets explore the object js thinks it is

var config = Render.getConfig("RenderMainView");
JSON.stringify(config);

gives us a massive configuration dump as an Class Object (Note, not a Javascript object by default).

{
  "FetchCullSort": {
    "CullSceneSelection": {
      "freezeFrustum": false,
      "numItems": 464,
      "skipCulling": false
    },
    "DepthSortOpaque": {
      "cpuRunTime": 0.0334,
      "enabled": true
    },
    "DepthSortOverlayOpaque": {
      "cpuRunTime": 0.0002,
      "enabled": true
    },
    "DepthSortOverlayTransparent": {
      "cpuRunTime": 0.0002,
      "enabled": true
    },
    "DepthSortTransparent": {
      "cpuRunTime": 0.0031,
      "enabled": true
    },
    "FetchOverlaySelection": {
      "cpuRunTime": 0.008,
      "enabled": true
    },
    "FetchSceneSelection": {
      "LODAngle": 2,
      "freezeFrustum": false,
      "numItems": 0
    },
    "FilterOverlaySelection": {
      "numItems": 0
    },
    "FilterSceneSelection": {
      "numItems": 0
    }
  },
  "RenderDeferredTask": {
    "AmbientOcclusion": {
      "blurDeviation": 2.5,
      "blurRadius": 4,
      "borderingEnabled": true,
      "ditheringEnabled": true,
      "edgeSharpness": 1,
      "enabled": false,
      "falloffBias": 0.009999999776482582,
      "fetchMipsEnabled": true,
      "numSamples": 16,
      "numSpiralTurns": 7,
      "obscuranceLevel": 0.5,
      "radius": 0.5,
      "resolutionLevel": 1
    },
    "Antialiasing": {
      "blend": 0.25,
      "constrainColor": true,
      "covarianceGamma": 0.6499999761581421,
      "debug": false,
      "debugCursorTexcoord": null,
      "debugOrbZoom": 2,
      "debugShowVelocityThreshold": 1,
      "debugX": 0,
      "feedbackColor": false,
      "fxaaOnOff": false,
      "sharpen": 0.05000000074505806,
      "showClosestFragment": false,
      "showCursorPixel": false
    },
    "BeginHighlightRangeTimer": {
      "cpuRunTime": 0.0009,
      "enabled": true
    },
    "BeginOpaqueRangeTimer": {
      "cpuRunTime": 0.0018,
      "enabled": true
    },
    "BeginOverlaysInFrontRangeTimer": {
      "cpuRunTime": 0.0006,
      "enabled": true
    },
    "BeginToneAndPostRangeTimer": {
      "cpuRunTime": 0.0006,
      "enabled": true
    },
    "Blit": {
      "cpuRunTime": 0.0011,
      "enabled": true
    },
    "Bloom": {
      "BloomApply": {
        "intensity": 0.25,
        "sigma": 1
      },
      "BloomBlur0": {
        "enabled": true,
        "filterScale": 1,
        "mix": 1
      },
      "BloomBlur1": {
        "enabled": true,
        "filterScale": 1,
        "mix": 1
      },
      "BloomBlur2": {
        "enabled": true,
        "filterScale": 1,
        "mix": 1
      },
      "BloomDraw": {
        "cpuRunTime": 0,
        "enabled": true
      },
      "BloomThreshold": {
        "threshold": 0.8999999761581421
      },
      "DebugBloom": {
        "mode": 3
      },
      "intensity": 0.25,
      "size": 0.699999988079071
    },
    "DebugAmbientOcclusion": {
      "debugCursorTexcoord": null,
      "showCursorPixel": false
    },
    "DebugDeferredBuffer": {
      "enabled": false,
      "mode": 0,
      "size": [
        0,
        -1,
        1,
        1
      ]
    },
    "DebugLightClusters": {
      "doDrawClusterFromDepth": false,
      "doDrawContent": false,
      "doDrawGrid": false
    },
    "DebugScattering": {
      "debugCursorTexcoord": null,
      "showCursorPixel": false,
      "showLUT": false,
      "showProfile": false,
      "showSpecularTable": false
    },
    "DeferredFrameTransform": {
      "cpuRunTime": 0.0016,
      "enabled": true
    },
    "DrawBackgroundDeferred": {
      "cpuRunTime": 0.0038,
      "enabled": true
    },
    "DrawHazeDeferred": {
      "cpuRunTime": 0.0034,
      "enabled": true
    },
    "DrawHighlight": {
      "ExtractSelectionName": {
        "cpuRunTime": 0,
        "enabled": true
      },
      "HighlightDebug": {
        "viewMask": false
      },
      "HighlightDepthSort": {
        "cpuRunTime": 0,
        "enabled": true
      },
      "HighlightEffect0": {
        "cpuRunTime": 0,
        "enabled": true
      },
      "HighlightEffect1": {
        "cpuRunTime": 0,
        "enabled": true
      },
      "HighlightEffect2": {
        "cpuRunTime": 0,
        "enabled": true
      },
      "HighlightEffect3": {
        "cpuRunTime": 0,
        "enabled": true
      },
      "HighlightEffect4": {
        "cpuRunTime": 0,
        "enabled": true
      },
      "HighlightEffect5": {
        "cpuRunTime": 0,
        "enabled": true
      },
      "HighlightEffect6": {
        "cpuRunTime": 0,
        "enabled": true
      },
      "HighlightEffect7": {
        "cpuRunTime": 0,
        "enabled": true
      },
      "HighlightMask0": {
        "cpuRunTime": 0,
        "enabled": true
      },
      "HighlightMask1": {
        "cpuRunTime": 0,
        "enabled": true
      },
      "HighlightMask2": {
        "cpuRunTime": 0,
        "enabled": true
      },
      "HighlightMask3": {
        "cpuRunTime": 0,
        "enabled": true
      },
      "HighlightMask4": {
        "cpuRunTime": 0,
        "enabled": true
      },
      "HighlightMask5": {
        "cpuRunTime": 0,
        "enabled": true
      },
      "HighlightMask6": {
        "cpuRunTime": 0,
        "enabled": true
      },
      "HighlightMask7": {
        "cpuRunTime": 0,
        "enabled": true
      },
      "HighlightMetaToSubItemIDs": {
        "cpuRunTime": 0,
        "enabled": true
      },
      "HighlightMetaToSubItems": {
        "cpuRunTime": 0,
        "enabled": true
      },
      "HighlightPipelineSort": {
        "cpuRunTime": 0,
        "enabled": true
      },
      "MetaSelection": {
        "cpuRunTime": 0,
        "enabled": true
      },
      "OpaqueSelection": {
        "cpuRunTime": 0,
        "enabled": true
      },
      "PrepareHighlight": {
        "cpuRunTime": 0,
        "enabled": true
      },
      "SelectionToHighlight": {
        "cpuRunTime": 0.0022,
        "enabled": true
      },
      "TransparentSelection": {
        "cpuRunTime": 0,
        "enabled": true
      }
    },
    "DrawItemSelection": {
      "enabled": false,
      "showInsideItems": true,
      "showInsideSubcellItems": true,
      "showPartialItems": true,
      "showPartialSubcellItems": true
    },
    "DrawLight": {
      "maxDrawn": -1,
      "numDrawn": 35
    },
    "DrawLightBounds": {
      "cpuRunTime": 0.0001,
      "enabled": false
    },
    "DrawMetaBounds": {
      "cpuRunTime": 0.0002,
      "enabled": false
    },
    "DrawOpaqueBounds": {
      "cpuRunTime": 0,
      "enabled": false
    },
    "DrawOpaqueDeferred": {
      "maxDrawn": -1,
      "numDrawn": 270,
      "stateSort": true
    },
    "DrawOverlayHUDOpaque": {
      "maxDrawn": -1,
      "numDrawn": 0
    },
    "DrawOverlayHUDOpaqueBounds": {
      "cpuRunTime": 0.0001,
      "enabled": false
    },
    "DrawOverlayHUDTransparent": {
      "maxDrawn": -1,
      "numDrawn": 0
    },
    "DrawOverlayHUDTransparentBounds": {
      "cpuRunTime": 0.0001,
      "enabled": false
    },
    "DrawOverlayInFrontOpaque": {
      "maxDrawn": -1,
      "numDrawn": 0
    },
    "DrawOverlayInFrontOpaqueBounds": {
      "cpuRunTime": 0.0001,
      "enabled": false
    },
    "DrawOverlayInFrontTransparent": {
      "maxDrawn": -1,
      "numDrawn": 0
    },
    "DrawOverlayInFrontTransparentBounds": {
      "cpuRunTime": 0.0001,
      "enabled": false
    },
    "DrawSceneOctree": {
      "enabled": false,
      "numAllocatedCells": 0,
      "numFreeCells": 0,
      "showEmptyCells": false,
      "showVisibleCells": true
    },
    "DrawSelectionBounds": {
      "cpuRunTime": 0.0001,
      "enabled": false
    },
    "DrawShadowFrustum0": {
      "isFrozen": false
    },
    "DrawShadowFrustum1": {
      "isFrozen": false
    },
    "DrawShadowFrustum2": {
      "isFrozen": false
    },
    "DrawShadowFrustum3": {
      "isFrozen": false
    },
    "DrawStatus": {
      "showDisplay": false,
      "showNetwork": false
    },
    "DrawTransparentBounds": {
      "cpuRunTime": 0.0001,
      "enabled": false
    },
    "DrawTransparentDeferred": {
      "maxDrawn": -1,
      "numDrawn": 15
    },
    "DrawViewFrustum": {
      "isFrozen": false
    },
    "DrawZoneStack": {
      "cpuRunTime": 0.0001,
      "enabled": false
    },
    "DrawZones": {
      "cpuRunTime": 0.0001,
      "enabled": false
    },
    "ExtractFrustums": {
      "cpuRunTime": 0.0011,
      "enabled": true
    },
    "Fade": {
      "baseLevel": 0,
      "baseSizeX": 0.4285714328289032,
      "baseSizeY": 0.4285714328289032,
      "baseSizeZ": 0.4285714328289032,
      "duration": 4,
      "edgeInnerColor": "#4ed7ff",
      "edgeInnerIntensity": 0,
      "edgeOuterColor": "#4ed7ff",
      "edgeOuterIntensity": 1,
      "edgeWidth": 0.3162277638912201,
      "editedCategory": 0,
      "isInverted": false,
      "manualFade": false,
      "manualThreshold": 0,
      "noiseLevel": 1,
      "noiseSizeX": 0.4107230305671692,
      "noiseSizeY": 0.4107230305671692,
      "noiseSizeZ": 0.4107230305671692,
      "noiseSpeedX": 0,
      "noiseSpeedY": 0,
      "noiseSpeedZ": 0,
      "threshold": 1.1894999742507935,
      "timing": 0
    },
    "FadeEdit": {
      "editFade": false
    },
    "FilterOverlaysLayeredOpaque": {
      "cpuRunTime": 0.0003,
      "enabled": true
    },
    "FilterOverlaysLayeredTransparent": {
      "cpuRunTime": 0.0003,
      "enabled": true
    },
    "HUD": {
      "cpuRunTime": 0.0016,
      "enabled": true
    },
    "HazeModel": {
      "hazeBackgroundBlend": 0,
      "hazeBaseReference": 0,
      "hazeColor": [
        0.5,
        0.6000000238418579,
        0.699999988079071
      ],
      "hazeGlareAngle": 20,
      "hazeGlareColor": [
        1,
        0.8999999761581421,
        0.699999988079071
      ],
      "hazeHeight": 200,
      "hazeKeyLightAltitude": 200,
      "hazeKeyLightRange": 1000,
      "hazeRange": 1000,
      "isAltitudeBased": false,
      "isHazeActive": false,
      "isHazeAttenuateKeyLight": false,
      "isHazeEnableGlare": false,
      "isModulateColorActive": false
    },
    "HighlightRangeTimer": {
      "batchRunTime": 0.017005720907409164,
      "gpuRunTime": 0.0005196177854931587
    },
    "JitterCam": {
      "freeze": false,
      "index": 0,
      "scale": 0.5,
      "stop": false
    },
    "LightClustering": {
      "dimX": 14,
      "dimY": 14,
      "dimZ": 14,
      "freeze": false,
      "numAllocatedSceneLights": 45,
      "numClusteredLightReferences": 242,
      "numClusteredLights": 35,
      "numFreeSceneLights": 0,
      "numInputLights": 35,
      "numSceneLights": 45,
      "rangeFar": 200,
      "rangeNear": 0.10000000149011612
    },
    "LightingModel": {
      "enableAlbedo": true,
      "enableAmbientLight": true,
      "enableBackground": true,
      "enableDiffuse": true,
      "enableDirectionalLight": true,
      "enableEmissive": true,
      "enableHaze": true,
      "enableLightmap": true,
      "enableMaterialTexturing": true,
      "enableObscurance": true,
      "enablePointLight": true,
      "enableScattering": true,
      "enableSpecular": true,
      "enableSpotLight": true,
      "enableUnlit": true,
      "enableWireframe": false,
      "showLightContour": false
    },
    "LinearDepth": {
      "batchRunTime": 0.1029458342503714,
      "gpuRunTime": 0.1462424306889243
    },
    "MetaSelection": {
      "cpuRunTime": 0.0011,
      "enabled": true
    },
    "OpaqueRangeTimer": {
      "batchRunTime": 1.0883382240539912,
      "gpuRunTime": 1.0526310784749153
    },
    "OpaqueSelection": {
      "cpuRunTime": 0.0005,
      "enabled": true
    },
    "OverlaysInFrontRangeTimer": {
      "batchRunTime": 0.029150007097159442,
      "gpuRunTime": 0.0013072016066005268
    },
    "PrepareDeferred": {
      "cpuRunTime": 0.0029,
      "enabled": true
    },
    "PreparePrimaryBuffer": {
      "resolutionScale": 1
    },
    "PrepareStencil": {
      "forceDraw": false,
      "maskMode": 0
    },
    "PrimaryBufferUpscale": {
      "factor": 1
    },
    "RenderDeferred": {
      "batchRunTime": 0.061527738983549254,
      "gpuRunTime": 0.6531004771366863
    },
    "Scattering": {
      "bentBlue": 0.30000001192092896,
      "bentGreen": 0.800000011920929,
      "bentRed": 1.5,
      "bentScale": 1.5,
      "curvatureOffset": 0.07999999821186066,
      "curvatureScale": 0.8999999761581421,
      "enableScattering": true,
      "showCurvature": false,
      "showDiffusedNormal": false,
      "showScatteringBRDF": false
    },
    "SurfaceGeometry": {
      "basisScale": 1,
      "curvatureScale": 10,
      "depthThreshold": 5,
      "diffuseDepthThreshold": 1,
      "diffuseFilterScale": 0.20000000298023224,
      "resolutionLevel": 1
    },
    "ToneAndPostRangeTimer": {
      "batchRunTime": 0.15308395021152416,
      "gpuRunTime": 0.6142401786620257
    },
    "ToneMapping": {
      "curve": 1,
      "enabled": true,
      "exposure": 0
    },
    "TransparentSelection": {
      "cpuRunTime": 0.0004,
      "enabled": true
    },
    "VelocityBuffer": {
      "depthThreshold": 5
    },
    "ZoneRenderer": {
      "FilterZones": {
        "cpuRunTime": 0.0023,
        "enabled": true
      },
      "SetupZones": {
        "cpuRunTime": 0.0067,
        "enabled": true
      },
      "maxDrawn": -1
    },
    "debugFade": false,
    "debugFadePercent": 0,
    "fadeDuration": 3,
    "fadeScale": 0.5,
    "resolutionScale": 1
  },
  "RenderShadowTask": {
    "CullShadowCascade": {
      "cpuRunTime": 0.0099,
      "enabled": true
    },
    "DepthSortShadow": {
      "cpuRunTime": 0.0373,
      "enabled": true
    },
    "FetchShadowSelection": {
      "cpuRunTime": 0.0312,
      "enabled": true
    },
    "FetchShadowTree": {
      "LODAngle": 2,
      "freezeFrustum": false,
      "numItems": 0
    },
    "PipelineSortShadow": {
      "cpuRunTime": 0.055,
      "enabled": true
    },
    "RenderShadowMap0": {
      "cpuRunTime": 0.0181,
      "enabled": true
    },
    "RenderShadowMap1": {
      "cpuRunTime": 0.0115,
      "enabled": true
    },
    "RenderShadowMap2": {
      "cpuRunTime": 0.0115,
      "enabled": true
    },
    "RenderShadowMap3": {
      "cpuRunTime": 0.0109,
      "enabled": true
    },
    "ShadowCascadeSetup0": {
      "cpuRunTime": 0.0019,
      "enabled": true
    },
    "ShadowCascadeSetup1": {
      "cpuRunTime": 0.0009,
      "enabled": true
    },
    "ShadowCascadeSetup2": {
      "cpuRunTime": 0.0006,
      "enabled": true
    },
    "ShadowCascadeSetup3": {
      "cpuRunTime": 0.0006,
      "enabled": true
    },
    "ShadowCascadeTeardown": {
      "cpuRunTime": 0.0002,
      "enabled": true
    },
    "ShadowCullCamera": {
      "cpuRunTime": 0.0182,
      "enabled": true
    },
    "ShadowSetup": {
      "constantBias0": 0.15000000596046448,
      "constantBias1": 0.15000000596046448,
      "constantBias2": 0.17499999701976776,
      "constantBias3": 0.20000000298023224,
      "slopeBias0": 0.6000000238418579,
      "slopeBias1": 0.6000000238418579,
      "slopeBias2": 0.699999988079071,
      "slopeBias3": 0.8199999928474426
    },
    "ShadowTeardown": {
      "cpuRunTime": 0.0003,
      "enabled": true
    },
    "enabled": true
  }
}

So, going through that, and interpolating with the luci script qml, we can guess this works in the following way.

You can then: (warning, blinding)

var config = Render.getConfig("RenderMainView");
config.getConfig("Bloom").enabled = true;
config.getConfig("Bloom").intensity = 10;

To get or set specific information.
You can alternatively also use:

Render.getConfig("RenderMainView.Bloom").enabled = true;
Render.getConfig("RenderMainView.Bloom").intensity = 10;

To Restore.

Render.getConfig("RenderMainView.Bloom").enabled = false;
Render.getConfig("RenderMainView.Bloom").intensity = 0.25;

This combined with enter zone / leave zone can create zone specific stuff.

If you want to modify both the RenderMainView and SecondaryCameraJob you need to effect both

var renderJobs = ["RenderMainView", "SecondaryCameraJob"];
for (var index = 0; index < renderJobs.length; index++){
  var config = Render.getConfig(renderJobs[index])
  if(config){ // Safeguard for Android, as "SecondaryCameraJob"  would otherwise give null
     var bloomConfig = config.getConfig("Bloom");
     config.enable = true;
     config.intensity = 2;
  }
}

Now what each single configuration line does, that I dont know, and thats what needs to be documented. Most of them are selfexplinatory, like AntiAliasing, Haze (Fog), Scattering (Subsurface Scattering defaults);
While Fade is something to do with the shader user when users come in and out of your view.

while cpuRunTime is the amount of time that the cpu should spend per frame on the part, or something akin to that: but in general advanced stuff.

Similar list occurs when one uses If you side track and check

var config = Render.getConfig("SecondaryCameraJob");
JSON.stringify(config);

Youd see similar list of configurations vs RenderMainView, which means you can independently define how either or view works.


Meanwhile

var config = Render.getConfig("SecondaryCamera");
JSON.stringify(config);

Gives entirely different info, as “documented” in comments of the Spectator Camera Script. Which is not really easy to find.

I guess the community should write all of this down

Unfortunately, Tonemaps are still limited to a set of curves, instead of being able to set our own.

0 = Linear
1 = Gamma22 / gamma of 2 . 2.
2 = Reinhard
3 = Filmic

Most are based on GDC stuff

Thats all I have for now.


#4

@Menithal What you did is a fantastic digging and reverse engineering :slight_smile:

A part from all the complexities of these sources, where I don’t want to steal too much of your time. Can you possibly clarify conceptually how one can organize to develop these kind of sources? I know that there are brilliant resources teaching qml and I tried to follow some of them, but got some difficulties as follows:

I wrote these very simple “helloworld.qml” sources, getting inspiration from some already present scripts and http://doc.qt.io/qt-5/qml-tutorial1.html:

testingqml.js:

var qml = Script.resolvePath('testingqml.qml');
var window = new OverlayWindow({
    title: 'Testing qml',
    source: qml,
    width: 400, height: 900,
});
window.closed.connect(function () { Script.stop(); });
Script.scriptEnding.connect(function () {  
    window.close();
})

testingqml.qml:

import QtQuick 2.0

Rectangle {
    id: page
    width: 320; height: 480
    color: "lightgray"

    Text {
        id: helloText
        text: "Hello world *****!"
        y: 30
        anchors.horizontalCenter: page.horizontalCenter
        font.pointSize: 10; font.bold: true
    }
}

It actually worked quite well:

Now, suppose I want to change the .qml and want the changes being reflected inside HF.
It seems that interface is caching the original version of .qml, so no changes in .qml are detected and recompiled.
Is there any way to force interface to use new version of a qml without exit and reentering and deleting .qmc compiled version?


#5

I prefer using HTML and the web bridge instead to communicate stuff from the UI to the main page as it tends to have less aggressive cache, can be debugged and developed In browser using the inspect tools and can be easier to cache bust. And with prior HTML knowledge one would save more time on it :). Even if it is just HTML wrapped inside QML container.

I haven’t experimented with QML for a Long time due to it, you could try cache busting it as well by adding ?random261662671 to the end of the resource request, but IIRC qml was quite aggressive and even probably wouldn’t help.

And since anything you do in qml can be done using the inworld script engine anyway; I find qml just unwieldy if I place client / world logic into it. Unfortunately, this means I dont have much sources for QML. Which does loads up faster after compilation which is it’s main benefit.

The HTML views do fit a logic separation to a Model View Controller paradigm, where HTML handles just the view, while the client script handles the rest is easier to manage.

And Example would be the Remove Grabbable Toolkit script and the html app it uses.

You can debug ones running in world by adding
--remote-debugging-port=port_number to the target of the shortcut of High Fidelity. More details of it here


#6

Yes! You can use CTRL+R or Running Scripts -> Reload All Scripts to clear the QML cache and reload your updated QML source from disk.


#7

@zfox I’m pretty sure that in those two hours I tried that as well, and surely I should have been quite tired not realizing it was actually working. I will repeat again this night with more belief and will give you final confirmation if that actually worked :slight_smile:
Thanks for jumping in and answering.


#8

Take a look at: Rendering Improvement