[x3d-public] Mapping SFColor to GLSL - vec3 or vec4?

Michalis Kamburelis michalis.kambi at gmail.com
Sun Nov 29 13:18:05 PST 2020


Hi,

This is a question to X3D implementors that support GLSL shaders (that
is, "ComposedShader" node with language="GLSL"). With custom fields in
ComposedShader mapping to GLSL uniform values. (See
https://castle-engine.io/x3d_implementation_shaders.php for CGE docs.)

Do you map SFColor to vec3 or vec4 in GLSL?

Similarly, do you map MFColor to vec3[] or vec4[] in GLSL?

The reason why I'm asking:

- The X3D specification 3.3 says to map SFColor / MFColor to vec4 /
vec4[] in GLSL. See "I.4.2 X3D Field types to GLSL data types",
https://www.web3d.org/documents/specifications/19775-1/V3.3/Part01/shaders_glsl.html#Otherfields
. The X3Dv4 (latest WD2) doesn't change it.

- However, SFColor is an RGB color. That is, it doesn't contain alpha
value. (We have dedicated SFColorRGBA for a color with alpha
information.) Same goes for MFColor -- it's a list of RGB colors.

- So it would be much more natural to map SFColor to vec3, and MFColor
to vec3[]. In case of large MFColor arrays, it would be also more
optimal, since you pass 3/4 less data to the GPU.

- So far, for a long time, view3dscene / Castle Game Engine
implemented the X3D spec literally, and we mapped SFColor / MFColor to
vec4 / vec4[]. But it is really unexpected for authors (costed me
quite some time recently to figure out "why do I have an error here, I
send SFColor to vec3, it should work..."). And it is inefficient, if
you think about large MFColor arrays.

- So I'm curious, what others (X3DOM? FreeWRL? etc.) do. If some /
most of the actual implementations map SFColor / MFColor -> vec3 /
vec3[], then maybe we can just fix the specification, to say something
better?

Regards,
Michalis



More information about the x3d-public mailing list