| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263 |
- package gltf
- import (
- "fmt"
- "github.com/g3n/engine/material"
- "github.com/g3n/engine/math32"
- "github.com/g3n/engine/texture"
- )
- func (g *GLTF) loadMaterialPBR(m *Material) (material.IMaterial, error) {
- // Get pbr information
- pbr := m.PbrMetallicRoughness
- if pbr == nil {
- return nil, fmt.Errorf("PbrMetallicRoughness not supplied")
- }
- // Create new physically based material
- pm := material.NewPhysical()
- // TODO emmisive factor, emmissive map, occlusion, etc...
- // BaseColorFactor
- var baseColorFactor math32.Color4
- if pbr.BaseColorFactor != nil {
- baseColorFactor = math32.Color4{pbr.BaseColorFactor[0], pbr.BaseColorFactor[1], pbr.BaseColorFactor[2], pbr.BaseColorFactor[3]}
- } else {
- baseColorFactor = math32.Color4{1,1,1,1}
- }
- pm.SetBaseColorFactor(&baseColorFactor)
- // MetallicFactor
- var metallicFactor float32
- if pbr.MetallicFactor != nil {
- metallicFactor = *pbr.MetallicFactor
- } else {
- metallicFactor = 1
- }
- pm.SetMetallicFactor(metallicFactor)
- // RoughnessFactor
- var roughnessFactor float32
- if pbr.RoughnessFactor != nil {
- roughnessFactor = *pbr.RoughnessFactor
- } else {
- roughnessFactor = 1
- }
- pm.SetRoughnessFactor(roughnessFactor)
- // BaseColorTexture
- var tex *texture.Texture2D
- var err error
- if pbr.BaseColorTexture != nil {
- tex, err = g.loadTextureInfo(pbr.BaseColorTexture)
- if err != nil {
- return nil, err
- }
- pm.SetBaseColorMap(tex)
- }
- return pm, nil
- }
|