Skip to main content

Pass

TypeNameInterface Description
VariablesdepthTest: boolean

Depth Test Switch

Example

mainPass.depthTest = false;

Use Case

@customNode()
export class Use Case_Pass_depthTest extends BasicScriptNode{

@input()
sceneObject: APJS.SceneObject;

@input()
depthTest: boolean = false;

execute() {

const renderer = this.sceneObject.getComponent('MeshRenderer') as APJS.MeshRenderer;
if (!renderer)
return;
const material = renderer.mainMaterial;
if (!material)
return;
const mainPass = material.mainPass
mainPass.depthTest = this.depthTest;
}
}
TypeNameInterface Description
VariablesdepthWrite: boolean

Depth Write Switch

Example

mainPass.depthWrite = false;

Use Case

@customNode()
export class Use Case_Pass_depthWrite extends BasicScriptNode{

@input()
sceneObject: APJS.SceneObject;

@input()
depthWrite: boolean = false;

execute() {

const renderer = this.sceneObject.getComponent('MeshRenderer') as APJS.MeshRenderer;
if (!renderer)
return;
const material = renderer.mainMaterial;
if (!material)
return;
const mainPass = material.mainPass
mainPass.depthWrite = this.depthWrite;
}
}
TypeNameInterface Description
VariablesdepthFunction: DepthFunction

Depth Test Function

Example

mainPass.depthFunction = APJS.DepthFunction.Greater;

Use Case

@customNode()
export class Use Case_Pass_depthTest extends BasicScriptNode{

@input()
sceneObject: APJS.SceneObject;

execute() {

const renderer = this.sceneObject.getComponent('MeshRenderer') as APJS.MeshRenderer;
if (!renderer)
return;
const material = renderer.mainMaterial;
if (!material)
return;
const mainPass = material.mainPass
mainPass.depthFunction = APJS.DepthFunction.Greater;
}
}
TypeNameInterface Description
VariablescolorMask: ColorMask

Color Mask

Example

let mask = 0;
mask |= APJS.ColorMask.R;
mask |= APJS.ColorMask.G;
mask |= APJS.ColorMask.B;
mask |= APJS.ColorMask.A;
mainPass.colorMask = mask;

Use Case

@customNode()
export class Use Case_Pass_colorMask extends BasicScriptNode{

@input()
sceneObject: APJS.SceneObject;

@input()
R: boolean = true;

@input()
G: boolean = true;

@input()
B: boolean = true;

@input()
A: boolean = true;

execute() {

const renderer = this.sceneObject.getComponent('MeshRenderer') as APJS.MeshRenderer;
if (!renderer)
return;
const material = renderer.mainMaterial;
if (!material)
return;
const mainPass = material.mainPass

let mask = 0;
if (this.R)
mask |= APJS.ColorMask.R;
if (this.G)
mask |= APJS.ColorMask.G;
if (this.B)
mask |= APJS.ColorMask.B;
if (this.A)
mask |= APJS.ColorMask.A;
mainPass.colorMask = mask;
}
}
TypeNameInterface Description
VariablescullMode: CullMode

Face Culling Mode

Example

mainPass.cullMode = APJS.CullMode.Back;

Use Case

@customNode()
export class Use Case_Pass_cullMode extends BasicScriptNode{

@input()
sceneObject: APJS.SceneObject;

@input()
back: boolean = true;

execute() {

const renderer = this.sceneObject.getComponent('MeshRenderer') as APJS.MeshRenderer;
if (!renderer)
return;
const material = renderer.mainMaterial;
if (!material)
return;
const mainPass = material.mainPass

if (this.back)
mainPass.cullMode = APJS.CullMode.Back;
else
mainPass.cullMode = APJS.CullMode.Front;
}
}
TypeNameInterface Description
VariablesstencilState: StencilState

Template Test

Example

mainPass.stencilState.enable = true;
mainPass.stencilState.failOperation = APJS.StencilOperation.Keep; mainPass.stencilState.passOperation = APJS.StencilOperation.Replace;
mainPass.stencilState.compareFunction = APJS.StencilFunction.Always;
mainPass.stencilState.writeMask = 42;
mainPass.stencilState.referenceValue = 42;

Use Case

@customNode()
export class Use Case_Pass_stencilSetup extends BasicScriptNode{

@input()
window: APJS.SceneObject;

@input()
objects: APJS.SceneObject[];

execute() {
this.setup1();
this.setup2();
}

setup1() {
const renderer = this.window.getComponent('MeshRenderer') as APJS.MeshRenderer;
if (!renderer)
return;
const material = renderer.mainMaterial;
if (!material)
return;
const mainPass = material.mainPass

material.renderQueue = 1;
mainPass.stencilState.enable = true;
mainPass.stencilState.failOperation = APJS.StencilOperation.Keep;
mainPass.stencilState.passOperation = APJS.StencilOperation.Replace;
mainPass.stencilState.compareFunction = APJS.StencilFunction.Always;
mainPass.stencilState.writeMask = 42;
mainPass.stencilState.referenceValue = 42;
}

setup2() {
for(let i = 0; i < this.objects.length; i++) {
const obj = this.objects[i];
const renderer = obj.getComponent('MeshRenderer') as APJS.MeshRenderer;
if (!renderer)
return;
const material = renderer.mainMaterial;
if (!material)
return;
const mainPass = material.mainPass

mainPass.stencilState.enable = true;
mainPass.stencilState.failOperation = APJS.StencilOperation.Keep;
mainPass.stencilState.passOperation = APJS.StencilOperation.Keep;
mainPass.stencilState.compareFunction = APJS.StencilFunction.Equal;
mainPass.stencilState.referenceValue = 42;
}
}
}
Copyright © 2025 TikTok. All rights reserved.
About TikTokHelp CenterCareersContactLegalCookies