123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293 |
- export const assign_color_varying = `
- #if defined(dRenderVariant_color)
- #if defined(dColorType_attribute)
- vColor.rgb = aColor;
- #elif defined(dColorType_instance)
- vColor.rgb = readFromTexture(tColor, aInstance, uColorTexDim).rgb;
- #elif defined(dColorType_group)
- vColor.rgb = readFromTexture(tColor, group, uColorTexDim).rgb;
- #elif defined(dColorType_groupInstance)
- vColor.rgb = readFromTexture(tColor, aInstance * float(uGroupCount) + group, uColorTexDim).rgb;
- #elif defined(dColorType_vertex)
- vColor.rgb = readFromTexture(tColor, VertexID, uColorTexDim).rgb;
- #elif defined(dColorType_vertexInstance)
- vColor.rgb = readFromTexture(tColor, int(aInstance) * uVertexCount + VertexID, uColorTexDim).rgb;
- #elif defined(dColorType_volume)
- vec3 cgridPos = (uColorGridTransform.w * (position - uColorGridTransform.xyz)) / uColorGridDim;
- vColor.rgb = texture3dFrom2dLinear(tColorGrid, cgridPos, uColorGridDim, uColorTexDim).rgb;
- #elif defined(dColorType_volumeInstance)
- vec3 cgridPos = (uColorGridTransform.w * (vModelPosition - uColorGridTransform.xyz)) / uColorGridDim;
- vColor.rgb = texture3dFrom2dLinear(tColorGrid, cgridPos, uColorGridDim, uColorTexDim).rgb;
- #endif
- #ifdef dUsePalette
- vPaletteV = ((vColor.r * 256.0 * 256.0 * 255.0 + vColor.g * 256.0 * 255.0 + vColor.b * 255.0) - 1.0) / 16777215.0;
- #endif
- #ifdef dOverpaint
- #if defined(dOverpaintType_instance)
- vOverpaint = readFromTexture(tOverpaint, aInstance, uOverpaintTexDim);
- #elif defined(dOverpaintType_groupInstance)
- vOverpaint = readFromTexture(tOverpaint, aInstance * float(uGroupCount) + group, uOverpaintTexDim);
- #elif defined(dOverpaintType_vertexInstance)
- vOverpaint = readFromTexture(tOverpaint, int(aInstance) * uVertexCount + VertexID, uOverpaintTexDim);
- #elif defined(dOverpaintType_volumeInstance)
- vec3 ogridPos = (uOverpaintGridTransform.w * (vModelPosition - uOverpaintGridTransform.xyz)) / uOverpaintGridDim;
- vOverpaint = texture3dFrom2dLinear(tOverpaintGrid, ogridPos, uOverpaintGridDim, uOverpaintTexDim);
- #endif
- // pre-mix to avoid darkening due to empty overpaint
- #ifdef dColorType_uniform
- vOverpaint.rgb = mix(uColor.rgb, vOverpaint.rgb, vOverpaint.a);
- #else
- vOverpaint.rgb = mix(vColor.rgb, vOverpaint.rgb, vOverpaint.a);
- #endif
- vOverpaint *= uOverpaintStrength;
- #endif
- #ifdef dSubstance
- #if defined(dSubstanceType_instance)
- vSubstance = readFromTexture(tSubstance, aInstance, uSubstanceTexDim);
- #elif defined(dSubstanceType_groupInstance)
- vSubstance = readFromTexture(tSubstance, aInstance * float(uGroupCount) + group, uSubstanceTexDim);
- #elif defined(dSubstanceType_vertexInstance)
- vSubstance = readFromTexture(tSubstance, int(aInstance) * uVertexCount + VertexID, uSubstanceTexDim);
- #elif defined(dSubstanceType_volumeInstance)
- vec3 sgridPos = (uSubstanceGridTransform.w * (vModelPosition - uSubstanceGridTransform.xyz)) / uSubstanceGridDim;
- vSubstance = texture3dFrom2dLinear(tSubstanceGrid, sgridPos, uSubstanceGridDim, uSubstanceTexDim);
- #endif
- // pre-mix to avoid artifacts due to empty substance
- vSubstance.rgb = mix(vec3(uMetalness, uRoughness, uBumpiness), vSubstance.rgb, vSubstance.a);
- vSubstance *= uSubstanceStrength;
- #endif
- #elif defined(dRenderVariant_pick)
- #ifdef requiredDrawBuffers
- vObject = vec4(packIntToRGB(float(uObjectId)), 1.0);
- vInstance = vec4(packIntToRGB(aInstance), 1.0);
- vGroup = vec4(packIntToRGB(group), 1.0);
- #else
- if (uPickType == 1) {
- vColor = vec4(packIntToRGB(float(uObjectId)), 1.0);
- } else if (uPickType == 2) {
- vColor = vec4(packIntToRGB(aInstance), 1.0);
- } else {
- vColor = vec4(packIntToRGB(group), 1.0);
- }
- #endif
- #endif
- #ifdef dTransparency
- #if defined(dTransparencyType_instance)
- vTransparency = readFromTexture(tTransparency, aInstance, uTransparencyTexDim).a;
- #elif defined(dTransparencyType_groupInstance)
- vTransparency = readFromTexture(tTransparency, aInstance * float(uGroupCount) + group, uTransparencyTexDim).a;
- #elif defined(dTransparencyType_vertexInstance)
- vTransparency = readFromTexture(tTransparency, int(aInstance) * uVertexCount + VertexID, uTransparencyTexDim).a;
- #elif defined(dTransparencyType_volumeInstance)
- vec3 tgridPos = (uTransparencyGridTransform.w * (vModelPosition - uTransparencyGridTransform.xyz)) / uTransparencyGridDim;
- vTransparency = texture3dFrom2dLinear(tTransparencyGrid, tgridPos, uTransparencyGridDim, uTransparencyTexDim).a;
- #endif
- vTransparency *= uTransparencyStrength;
- #endif
- `;
|