Textures

In order to use a texture as the color, the texture data needs to be provided as a uniform to the shader and the color needs to be sampled from the texture on each fragment.

import { texture2d, uniformSampler2d, float, varyingVec2, Sampler2D, Vec2Node, attributes }  from "@hology/core/shader-nodes"
import * as THREE from 'three'

const sampler: Sampler2D = uniformSampler2d('image')
const coord: Vec2Node = varyingVec2(attributes.uv)
const color: RgbaNode = texture2d(sampler, coord)

const texture = new THREE.TextureLoader().load( "path/to/texture.jpg" )

const material = new NodeShaderMaterial({
    color: color,
    uniforms: { image: { value: texture } }
})

If the texture is already available when creating the shader such as when it is passed in to a shader material via a parameter, then you can use the textureSampler2d function to create a sampler. By passing in the texture directly to this function, the texture does not also need to be added as a uniform.

import { texture2d, textureSampler2d, float, varyingVec2, Sampler2D, Vec2Node, attributes }  from "@hology/core/shader-nodes"
import * as THREE from 'three'

const texture = new THREE.TextureLoader().load( "path/to/texture.jpg" )

const sampler: Sampler2D = textureSampler2d(texture)
const coord: Vec2Node = varyingVec2(attributes.uv)
const color: RgbaNode = sampler.sample(coord)

const material = new NodeShaderMaterial({
    color: color
})

Last updated