Skip to content

Commit dba9ce8

Browse files
committed
new ops vertexarea/normals
1 parent b7fe5ad commit dba9ce8

File tree

6 files changed

+485
-0
lines changed

6 files changed

+485
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
const
2+
id = "mod" + Math.floor(Math.random() * 10000),
3+
render = op.inTrigger("render"),
4+
next = op.outTrigger("trigger");
5+
6+
const cgl = op.patch.cgl;
7+
8+
const srcHeadVert = ""
9+
.endl() + "OUT vec3 MOD_fragPos;"
10+
.endl();
11+
12+
const srcBodyVert = ""
13+
.endl() + "MOD_fragPos=(mMatrix*pos).xyz;"
14+
.endl();
15+
16+
const srcHeadFrag = attachments.head_frag;
17+
18+
const srcBodyFrag = ""
19+
.endl() + " normal = calculateNormal(MOD_fragPos);"
20+
.endl();
21+
22+
const moduleFrag = null;
23+
const moduleVert = null;
24+
25+
const mod = new CGL.ShaderModifier(cgl, op.name, { "opId": op.id });
26+
27+
mod.addModule(
28+
{
29+
"priority": 4,
30+
"title": op.name,
31+
"name": "MODULE_VERTEX_POSITION",
32+
"srcHeadVert": srcHeadVert,
33+
"srcBodyVert": srcBodyVert
34+
});
35+
36+
mod.addModule(
37+
{
38+
"title": op.name,
39+
"name": "MODULE_NORMAL",
40+
"srcHeadFrag": srcHeadFrag,
41+
"srcBodyFrag": srcBodyFrag
42+
});
43+
44+
render.onTriggered = function ()
45+
{
46+
mod.bind();
47+
next.trigger();
48+
mod.unbind();
49+
};
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
{
2+
"layout": {
3+
"portsIn": [
4+
{
5+
"type": 1,
6+
"name": "render"
7+
}
8+
],
9+
"portsOut": [
10+
{
11+
"type": 1,
12+
"name": "trigger"
13+
}
14+
]
15+
},
16+
"authorName": "pandur",
17+
"id": "f0927dcc-a3c5-4d4b-813a-e421b4fed240",
18+
"created": 1741688762469,
19+
"summary": "Fog as a shadereffect applied to a material",
20+
"docs": {
21+
"ports": []
22+
},
23+
"changelog": [
24+
{
25+
"message": "op created",
26+
"type": "new op",
27+
"author": "pandur",
28+
"date": 1741688762470
29+
},
30+
{
31+
"message": "Patch.PlwK53F.Normals renamed to Ops.Gl.ShaderEffects.Normals",
32+
"type": "rename",
33+
"author": "pandur",
34+
"date": 1741697134155
35+
}
36+
],
37+
"coreLibs": [
38+
"cgl_shadermodifier"
39+
],
40+
"issues": "",
41+
"caniusequery": "",
42+
"license": "MIT"
43+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
2+
IN vec3 MOD_fragPos;
3+
4+
vec3 calculateNormal(vec3 pos) {
5+
vec3 fdx = dFdx(pos);
6+
vec3 fdy = dFdy(pos);
7+
return normalize(cross(fdx, fdy));
8+
}
9+
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,120 @@
1+
const
2+
render = op.inTrigger("render"),
3+
inArea = op.inValueSelect("Area", ["Sphere", "Box", "Tri Prism", "Hex Prism", "Axis X", "Axis Y", "Axis Z", "Axis X Infinite", "Axis Y Infinite", "Axis Z Infinite"], "Sphere"),
4+
5+
inViz = op.inBool("Visualize Area", false),
6+
7+
inWorldSpace = op.inValueBool("WorldSpace", false),
8+
x = op.inValue("x"),
9+
y = op.inValue("y"),
10+
z = op.inValue("z"),
11+
12+
// inFalloff = op.inFloat("Falloff", 0),
13+
// inFalloffCurve = op.inSwitch("Falloff Curve", ["Linear", "Smoothstep", "pow2", "pow3"], "Linear"),
14+
15+
inRadius = op.inValue("Radius", 1),
16+
sizeX = op.inFloat("Area Size X", 1),
17+
sizeY = op.inFloat("Area Size Y", 1),
18+
sizeZ = op.inFloat("Area Size Z", 1),
19+
20+
changeTranslateX = op.inFloat("Translate X", 0),
21+
changeTranslateY = op.inFloat("Translate Y", 0),
22+
changeTranslateZ = op.inFloat("Translate Z", 0),
23+
24+
changeScaleX = op.inFloat("Scale X", 0.5),
25+
changeScaleY = op.inFloat("Scale Y", 0.5),
26+
changeScaleZ = op.inFloat("Scale Z", 0.5),
27+
28+
next = op.outTrigger("trigger");
29+
30+
const cgl = op.patch.cgl;
31+
32+
op.setPortGroup("Area", [inRadius, sizeX, sizeY, sizeZ]);
33+
34+
inViz.onChange =
35+
inWorldSpace.onChange =
36+
// inFalloffCurve.onChange =
37+
inArea.onChange = updateDefines;
38+
39+
const srcHeadVert = attachments.deformarea_vert;
40+
41+
const srcBodyVert = ""
42+
.endl() + "pos=MOD_deform(pos,mMatrix,false,norm);"
43+
.endl() + "norm=MOD_deform(pos,mMatrix,true,norm).xyz;"
44+
.endl();
45+
46+
const mod = new CGL.ShaderModifier(cgl, op.name, { "opId": op.id });
47+
mod.addModule({
48+
"title": op.name,
49+
"name": "MODULE_VERTEX_POSITION",
50+
"srcHeadVert": attachments.deformarea_vert,
51+
"srcBodyVert": srcBodyVert
52+
});
53+
54+
mod.addModule({
55+
"title": op.name,
56+
"name": "MODULE_COLOR",
57+
"srcHeadFrag": "IN float MOD_viz;".endl(),
58+
// "srcBodyFrag": "col=mix(col,vec4(1.,0.,0.,1.),MOD_viz);"
59+
"srcBodyFrag": "#ifdef MOD_VIZ\nif(MOD_viz>0.0001)col=vec4(1.,0.,0.,1.);\n#endif\n"
60+
});
61+
62+
mod.addUniformVert("f", "MOD_fallOff", 0);
63+
mod.addUniformVert("f", "MOD_radius", inRadius);
64+
65+
mod.addUniformVert("3f", "MOD_pos", x, y, z);
66+
mod.addUniformVert("3f", "MOD_scale", sizeX, sizeY, sizeZ);
67+
mod.addUniformVert("3f", "MOD_changeScale", changeScaleX, changeScaleY, changeScaleZ);
68+
mod.addUniformVert("3f", "MOD_changeTranslate", changeTranslateX, changeTranslateY, changeTranslateZ);
69+
70+
updateDefines();
71+
72+
function updateDefines()
73+
{
74+
// mod.toggleDefine("MOD_FALLOFF_SMOOTH", inFalloffCurve.get() == "Smoothstep");
75+
// mod.toggleDefine("MOD_FALLOFF_POW2", inFalloffCurve.get() == "pow2");
76+
// mod.toggleDefine("MOD_FALLOFF_POW3", inFalloffCurve.get() == "pow3");
77+
78+
mod.toggleDefine("MOD_AREA_SPHERE", inArea.get() == "Sphere");
79+
mod.toggleDefine("MOD_AREA_BOX", inArea.get() == "Box");
80+
mod.toggleDefine("MOD_AREA_AXIS_X", inArea.get() == "Axis X");
81+
mod.toggleDefine("MOD_AREA_AXIS_Y", inArea.get() == "Axis Y");
82+
mod.toggleDefine("MOD_AREA_AXIS_Z", inArea.get() == "Axis Z");
83+
mod.toggleDefine("MOD_AREA_AXIS_X_INFINITE", inArea.get() == "Axis X Infinite");
84+
mod.toggleDefine("MOD_AREA_AXIS_Y_INFINITE", inArea.get() == "Axis Y Infinite");
85+
mod.toggleDefine("MOD_AREA_AXIS_Z_INFINITE", inArea.get() == "Axis Z Infinite");
86+
mod.toggleDefine("MOD_AREA_TRIPRISM", inArea.get() == "Tri Prism");
87+
mod.toggleDefine("MOD_AREA_HEXPRISM", inArea.get() == "Hex Prism");
88+
89+
mod.toggleDefine("MOD_WORLDSPACE", inWorldSpace.get());
90+
mod.toggleDefine("MOD_VIZ", inViz.get());
91+
92+
inRadius.setUiAttribs({ "greyout": inArea.get() != "Sphere" });
93+
sizeZ.setUiAttribs({ "greyout": inArea.get() != "Box" });
94+
sizeY.setUiAttribs({ "greyout": inArea.get() != "Box" });
95+
sizeX.setUiAttribs({ "greyout": inArea.get() != "Box" });
96+
}
97+
98+
render.onTriggered = function ()
99+
{
100+
if (CABLES.UI)
101+
{
102+
if (op.isCurrentUiOp()) gui.setTransformGizmo({ "posX": x, "posY": y, "posZ": z });
103+
104+
if (cgl.shouldDrawHelpers(op))
105+
{
106+
cgl.pushModelMatrix();
107+
mat4.translate(cgl.mMatrix, cgl.mMatrix, [x.get(), y.get(), z.get()]);
108+
109+
if (inArea.get() == "Sphere")
110+
CABLES.GL_MARKER.drawSphere(op, inRadius.get());
111+
cgl.popModelMatrix();
112+
}
113+
}
114+
115+
mod.bind();
116+
next.trigger();
117+
mod.unbind();
118+
};
119+
120+
///
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,120 @@
1+
{
2+
"layout": {
3+
"portsIn": [
4+
{
5+
"type": 1,
6+
"name": "render"
7+
},
8+
{
9+
"type": 0,
10+
"name": "Area index",
11+
"subType": "integer"
12+
},
13+
{
14+
"type": 0,
15+
"name": "Visualize Area",
16+
"subType": "boolean"
17+
},
18+
{
19+
"type": 0,
20+
"name": "WorldSpace",
21+
"subType": "boolean"
22+
},
23+
{
24+
"type": 0,
25+
"name": "x",
26+
"subType": "number"
27+
},
28+
{
29+
"type": 0,
30+
"name": "y",
31+
"subType": "number"
32+
},
33+
{
34+
"type": 0,
35+
"name": "z",
36+
"subType": "number"
37+
},
38+
{
39+
"type": 0,
40+
"name": "Radius",
41+
"group": "Area",
42+
"subType": "number"
43+
},
44+
{
45+
"type": 0,
46+
"name": "Area Size X",
47+
"group": "Area",
48+
"subType": "number"
49+
},
50+
{
51+
"type": 0,
52+
"name": "Area Size Y",
53+
"group": "Area",
54+
"subType": "number"
55+
},
56+
{
57+
"type": 0,
58+
"name": "Area Size Z",
59+
"group": "Area",
60+
"subType": "number"
61+
},
62+
{
63+
"type": 0,
64+
"name": "Translate X",
65+
"subType": "number"
66+
},
67+
{
68+
"type": 0,
69+
"name": "Translate Y",
70+
"subType": "number"
71+
},
72+
{
73+
"type": 0,
74+
"name": "Translate Z",
75+
"subType": "number"
76+
},
77+
{
78+
"type": 0,
79+
"name": "Scale X",
80+
"subType": "number"
81+
},
82+
{
83+
"type": 0,
84+
"name": "Scale Y",
85+
"subType": "number"
86+
},
87+
{
88+
"type": 0,
89+
"name": "Scale Z",
90+
"subType": "number"
91+
}
92+
],
93+
"portsOut": [
94+
{
95+
"type": 1,
96+
"name": "trigger"
97+
}
98+
]
99+
},
100+
"author": "55d744634cdc152216eb9aad",
101+
"authorName": "pandur",
102+
"id": "1ddaf940-e911-4ab0-9901-7b828bf7aa79",
103+
"created": 1741614407677,
104+
"summary": "deform a spherical area of a mesh",
105+
"docs": {
106+
"ports": []
107+
},
108+
"changelog": [
109+
{
110+
"message": "op created",
111+
"type": "new op",
112+
"author": "pandur",
113+
"date": 1741614407678
114+
}
115+
],
116+
"coreLibs": [
117+
"cgl_shadermodifier"
118+
],
119+
"license": "MIT"
120+
}

0 commit comments

Comments
 (0)