material_pbr.go 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. package gltf
  2. import (
  3. "fmt"
  4. "github.com/g3n/engine/material"
  5. "github.com/g3n/engine/math32"
  6. "github.com/g3n/engine/texture"
  7. )
  8. func (g *GLTF) loadMaterialPBR(m *Material) (material.IMaterial, error) {
  9. // Get pbr information
  10. pbr := m.PbrMetallicRoughness
  11. if pbr == nil {
  12. return nil, fmt.Errorf("PbrMetallicRoughness not supplied")
  13. }
  14. // Create new physically based material
  15. pm := material.NewPhysical()
  16. // TODO emmisive factor, emmissive map, occlusion, etc...
  17. // BaseColorFactor
  18. var baseColorFactor math32.Color4
  19. if pbr.BaseColorFactor != nil {
  20. baseColorFactor = math32.Color4{pbr.BaseColorFactor[0], pbr.BaseColorFactor[1], pbr.BaseColorFactor[2], pbr.BaseColorFactor[3]}
  21. } else {
  22. baseColorFactor = math32.Color4{1,1,1,1}
  23. }
  24. pm.SetBaseColorFactor(&baseColorFactor)
  25. // MetallicFactor
  26. var metallicFactor float32
  27. if pbr.MetallicFactor != nil {
  28. metallicFactor = *pbr.MetallicFactor
  29. } else {
  30. metallicFactor = 1
  31. }
  32. pm.SetMetallicFactor(metallicFactor)
  33. // RoughnessFactor
  34. var roughnessFactor float32
  35. if pbr.RoughnessFactor != nil {
  36. roughnessFactor = *pbr.RoughnessFactor
  37. } else {
  38. roughnessFactor = 1
  39. }
  40. pm.SetRoughnessFactor(roughnessFactor)
  41. // BaseColorTexture
  42. var tex *texture.Texture2D
  43. var err error
  44. if pbr.BaseColorTexture != nil {
  45. tex, err = g.loadTextureInfo(pbr.BaseColorTexture)
  46. if err != nil {
  47. return nil, err
  48. }
  49. pm.SetBaseColorMap(tex)
  50. }
  51. return pm, nil
  52. }