res.go 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338
  1. package model
  2. import (
  3. "time"
  4. "go.mongodb.org/mongo-driver/bson/primitive"
  5. )
  6. const (
  7. LibState_Created = 1
  8. LibState_Complated = 2
  9. LibState_Publish2Qiye = 3
  10. )
  11. type Texture struct {
  12. Id primitive.ObjectID `bson:"_id,omitempty" json:"_id"`
  13. Image OssType `bson:"image,omitempty" json:"image"`
  14. CreateTime time.Time `bson:"createTime,omitempty" json:"createTime"`
  15. }
  16. type ObsItem struct {
  17. Name string `json:"name"`
  18. LastModified time.Time `json:"lastModified"`
  19. Size uint64 `json:"size"`
  20. IsImage bool `json:"isImage"`
  21. Url string `json:"url"`
  22. IsDir bool `json:"isDir"`
  23. }
  24. type MaterailUv struct {
  25. Scale float64 `bson:"scale" json:"scale"`
  26. Rotate float64 `bson:"rotate" json:"rotate"`
  27. OffsetX float64 `bson:"offsetX" json:"offsetX"`
  28. OffsetY float64 `bson:"offsetY" json:"offsetY"`
  29. }
  30. type MatAlbedo struct {
  31. Color *Vect3 `bson:"color" json:"color"`
  32. Texture *OssType `bson:"texture" json:"texture"`
  33. UseTexture *bool `bson:"useTexture" json:"useTexture"`
  34. }
  35. type MatRoughness struct {
  36. UseTexture *bool `bson:"useTexture" json:"useTexture"`
  37. Texture *OssType `bson:"texture" json:"texture"`
  38. Factor *float32 `bson:"factor" json:"factor"`
  39. }
  40. type MatMetalness struct {
  41. UseTexture *bool `bson:"useTexture" json:"useTexture"`
  42. Texture *OssType `bson:"texture" json:"texture"`
  43. Factor *float32 `bson:"factor" json:"factor"`
  44. }
  45. type MatNormal struct {
  46. UseTexture *bool `bson:"useTexture" json:"useTexture"`
  47. Texture *OssType `bson:"texture" json:"texture"`
  48. Factor *float32 `bson:"factor" json:"factor"`
  49. FlipY *bool `bson:"flipY" json:"flipY"`
  50. }
  51. type MatDisplace struct {
  52. UseTexture *bool `bson:"useTexture" json:"useTexture"`
  53. Texture *OssType `bson:"texture" json:"texture"`
  54. Factor *float32 `bson:"factor" json:"factor"`
  55. }
  56. type MatDiffuse struct {
  57. UseTexture *bool `bson:"useTexture" json:"useTexture"`
  58. Texture *OssType `bson:"texture" json:"texture"`
  59. Factor *float32 `bson:"factor" json:"factor"`
  60. }
  61. type MatTextureFactorWithEnable struct {
  62. UseTexture *bool `bson:"useTexture" json:"useTexture"`
  63. Texture *OssType `bson:"texture" json:"texture"`
  64. Factor *float32 `bson:"factor" json:"factor"`
  65. Enable bool `bson:"enable" json:"enable"`
  66. }
  67. type MatTextureFactor struct {
  68. UseTexture *bool `bson:"useTexture" json:"useTexture"`
  69. Texture *OssType `bson:"texture" json:"texture"`
  70. Factor *float32 `bson:"factor" json:"factor"`
  71. }
  72. type MatTextureColor struct {
  73. UseTexture *bool `bson:"useTexture" json:"useTexture"`
  74. Texture *OssType `bson:"texture" json:"texture"`
  75. Color *Vect3 `bson:"color" json:"color"`
  76. }
  77. type MatOpacity struct {
  78. Enable bool `bson:"enable" json:"enable"`
  79. Factor *float32 `bson:"factor" json:"factor"`
  80. Texture *OssType `bson:"texture" json:"texture"`
  81. UseTexture *bool `bson:"useTexture" json:"useTexture"`
  82. }
  83. type MatConfig struct {
  84. Version int `bson:"version,omitempty" json:"version"`
  85. Type string `bson:"type,omitempty" json:"type"` //高光流 金属流(默认) meta spec
  86. Uvtransform *MaterailUv `bson:"uv,omitempty" json:"uv"`
  87. CullFace string `bson:"cullFace" json:"cullFace"`
  88. Albedo *MatTextureColor `bson:"albedo" json:"albedo"`
  89. Roughness *MatTextureFactor `bson:"roughness" json:"roughness"`
  90. Metalness *MatTextureFactor `bson:"metalness" json:"metalness"`
  91. Normal *MatNormal `bson:"normal" json:"normal"`
  92. Opacity *MatTextureFactorWithEnable `bson:"opacity" json:"opacity"`
  93. Displace *MatTextureFactorWithEnable `bson:"displace,omitempty" json:"displace"` //置换
  94. Diffuse *MatTextureColor `bson:"diffuse,omitempty" json:"diffuse"`
  95. Specular *MatTextureColor `bson:"specular" json:"specular"`
  96. Gloss *MatTextureFactor `bson:"gloss,omitempty" json:"gloss"` //光泽贴图
  97. UvMap string `bson:"uvMap,omitempty" json:"uvMap"` //uv包裹 box、uv
  98. }
  99. type TechMatConfig struct {
  100. Version int `bson:"version,omitempty" json:"version"`
  101. Type string `bson:"type,omitempty" json:"type"`
  102. Uvtransform *MaterailUv `bson:"uvtransform,omitempty" json:"uvtransform"`
  103. CullFace string `bson:"cullFace" json:"cullFace"`
  104. Albedo *MatAlbedo `bson:"albedo" json:"albedo"`
  105. Roughness *MatRoughness `bson:"roughness" json:"roughness"`
  106. Metalness *MatMetalness `bson:"metalness" json:"metalness"`
  107. Specular *MatAlbedo `bson:"specular" json:"specular"`
  108. Normal *MatNormal `bson:"normal" json:"normal"`
  109. Opacity *MatOpacity `bson:"opacity" json:"opacity"`
  110. }
  111. type MaterialChannels struct {
  112. Albedo *MaterailFeature `bson:"Albedo" json:"Albedo"`
  113. Roughness *MaterailFeature `bson:"Roughness" json:"Roughness"`
  114. NormalMap *MaterailFeature `bson:"NormalMap" json:"NormalMap"`
  115. BumpMap *MaterailFeature `bson:"BumpMap" json:"BumpMap"`
  116. Opacity *OpacityFeature `bson:"Opacity" json:"Opacity"`
  117. AO *AOFeature `bson:"AO" json:"AO"`
  118. MetalnessPBR *MaterailFeature `bson:"MetalnessPBR" json:"MetalnessPBR"`
  119. SpecularF0 float32 `bson:"SpecularF0" json:"SpecularF0"`
  120. ClearCoat *ClearCoatFeature `bson:"ClearCoat" json:"ClearCoat"`
  121. Displacement *MaterailFeature `bson:"Displacement" json:"Displacement"`
  122. CavityMap *MaterailFeature `bson:"CavityMap" json:"CavityMap"`
  123. Emissive *Emissive `bson:"Emissive" json:"Emissive"`
  124. }
  125. type Emissive struct {
  126. Color Vect3 `bson:"color" json:"color"`
  127. Enable bool `bson:"enable" json:"enable"`
  128. Factor float32 `bson:"factor" json:"factor"`
  129. }
  130. type MaterailFeature struct {
  131. Color *Vect3 `bson:"color" json:"color"`
  132. Texture *OssType `bson:"texture" json:"texture"`
  133. Factor *float32 `bson:"factor" json:"factor"`
  134. Invert *bool `bson:"invert" json:"invert"`
  135. Enable *bool `bson:"enable" json:"enable"`
  136. FlipY *bool `bson:"flipY" json:"flipY"`
  137. }
  138. type OpacityFeature struct {
  139. Enable bool `bson:"enable" json:"enable"`
  140. Type string `bson:"type" json:"type"`
  141. Factor float32 `bson:"factor" json:"factor"`
  142. Invert bool `bson:"invert" json:"invert"`
  143. SampleChannel string `bson:"sampleChannel" json:"sampleChannel"`
  144. RefractionTint Vect3 `bson:"refractionTint" json:"refractionTint"`
  145. RefractUseDiffuse bool `bson:"refractUseDiffuse" json:"refractUseDiffuse"`
  146. RefractUseShininessMap bool `bson:"refractUseShininessMap" json:"refractUseShininessMap"`
  147. IOR float32 `bson:"IOR" json:"IOR"`
  148. RoughnessFactor float32 `bson:"roughnessFactor" json:"roughnessFactor"`
  149. Texture OssType `bson:"texture" json:"texture"`
  150. }
  151. type AOFeature struct {
  152. Enable bool `bson:"enable" json:"enable"`
  153. OccludeSpecular bool `bson:"occludeSpecular" json:"occludeSpecular"`
  154. Factor float32 `bson:"factor" json:"factor"`
  155. Texture OssType `bson:"texture" json:"texture"`
  156. }
  157. type ClearCoatFeature struct {
  158. Enable bool `bson:"enable" json:"enable"`
  159. Thickness float32 `bson:"thickness" json:"thickness"`
  160. Intensity float32 `bson:"intensity" json:"intensity"`
  161. Color Vect3 `bson:"color" json:"color"`
  162. Reflectivity float32 `bson:"reflectivity" json:"reflectivity"`
  163. Roughness struct {
  164. Factor float32 `bson:"factor" json:"factor"`
  165. } `bson:"roughness" json:"roughness"`
  166. Normalmap struct {
  167. Factor float32 `bson:"factor" json:"factor"`
  168. FlipY bool `bson:"flipY" json:"flipY"`
  169. } `bson:"normalmap" json:"normalmap"`
  170. }
  171. //材质球
  172. type Material struct {
  173. Id primitive.ObjectID `bson:"_id,omitempty" json:"_id"`
  174. UserId primitive.ObjectID `bson:"userId,omitempty" json:"userId"` //用户ID
  175. Name string `bson:"name,omitempty" json:"name"`
  176. Data *MatConfig `bson:"data,omitempty" json:"data"`
  177. Thumbnail *OssType `bson:"thumbnail,omitempty" json:"thumbnail"`
  178. CreateTime time.Time `bson:"createTime,omitempty" json:"createTime"`
  179. Category string `bson:"category,omitempty" json:"category"`
  180. IsPublic *bool `bson:"isPublic,omitempty" json:"isPublic"` //是否公开
  181. IsEffect *bool `bson:"effect,omitempty" json:"effect"` //是否属于效果材质球
  182. IsPlatform *bool `bson:"platform,omitempty" json:"platform"` //是否属于平台
  183. }
  184. type Env3dOption struct {
  185. Rotation float64 `bson:"rotation" json:"rotation"`
  186. Exposure float64 `bson:"exposure" json:"exposure"`
  187. }
  188. func NewEnv3dOptionWithMap(options map[string]interface{}) *Env3dOption {
  189. Rotation := float64(0.0)
  190. if v, ok := options["rotation"].(float64); ok {
  191. Rotation = v
  192. } else if v, ok := options["rotation"].(float64); ok {
  193. Rotation = float64(v)
  194. }
  195. Exposure := float64(1.0)
  196. if v, ok := options["exposure"].(float64); ok {
  197. Exposure = v
  198. } else if v, ok := options["exposure"].(float64); ok {
  199. Exposure = float64(v)
  200. }
  201. return &Env3dOption{Rotation: Rotation, Exposure: Exposure}
  202. }
  203. func NewEnv3dToneMapWithMap(tone map[string]interface{}) *ToneMap {
  204. method := int32(0)
  205. Exposure := float64(1)
  206. Saturation := float64(1)
  207. Brightness := float64(0)
  208. Contrast := float64(0)
  209. if tone == nil {
  210. return &ToneMap{
  211. Method: &method,
  212. Exposure: &Exposure,
  213. Saturation: &Saturation,
  214. Brightness: &Brightness,
  215. Contrast: &Contrast,
  216. }
  217. }
  218. if v, ok := tone["method"].(int32); ok {
  219. method = v
  220. }
  221. if v, ok := tone["exposure"].(float64); ok {
  222. Exposure = v
  223. }
  224. if v, ok := tone["saturation"].(float64); ok {
  225. Saturation = v
  226. }
  227. if v, ok := tone["brightness"].(float64); ok {
  228. Brightness = v
  229. }
  230. if v, ok := tone["contrast"].(float64); ok {
  231. Contrast = v
  232. }
  233. return &ToneMap{Method: &method, Exposure: &Exposure, Saturation: &Saturation, Brightness: &Brightness, Contrast: &Contrast}
  234. }
  235. func NewEnv3dBackgroundWithMap(options map[string]interface{}) *Evn3dBackground {
  236. Color := options["color"].(primitive.A)
  237. Image := &OssType{}
  238. if options["image"] != nil {
  239. Image = NewOssTypeWithMap(options["image"].(map[string]interface{}))
  240. }
  241. Type := options["type"].(int32)
  242. return &Evn3dBackground{Color: &Vect3{Color[0].(float64), Color[1].(float64), Color[2].(float64)}, Image: Image, Type: Type}
  243. }
  244. type ToneMap struct {
  245. Method *int32 `bson:"method,omitempty" json:"method"` //0 "linear" 值0 "reinhard" 值 1 "filmic”:值2
  246. Exposure *float64 `bson:"exposure,omitempty" json:"exposure"` //默认值1 范围0到2
  247. Brightness *float64 `bson:"brightness,omitempty" json:"brightness"` //默认值0 范围-1到 1
  248. Contrast *float64 `bson:"contrast,omitempty" json:"contrast"` //默认值0 范围-1到1
  249. Saturation *float64 `bson:"saturation,omitempty" json:"saturation"` //默认值1 范围0-2
  250. }
  251. type Evn3dTextureImage struct {
  252. File string `bson:"file,omitempty" json:"file"`
  253. SizeUncompressed int32 `bson:"sizeUncompressed,omitempty" json:"sizeUncompressed"`
  254. Samples uint32 `bson:"samples,omitempty" json:"samples"`
  255. Height float32 `bson:"height,omitempty" json:"height"`
  256. Width float32 `bson:"width,omitempty" json:"width"`
  257. SizeCompressed int32 `bson:"sizeCompressed,omitempty" json:"sizeCompressed"`
  258. Blur float32 `bson:"blur,omitempty,truncate" json:"blur"`
  259. }
  260. type Evn3dTexture struct {
  261. Images []*Evn3dTextureImage `bson:"images,omitempty" json:"images"`
  262. LimitSize int32 `bson:"limitSize,omitempty" json:"limitSize"`
  263. Encoding string `bson:"encoding,omitempty" json:"encoding"`
  264. Type string `bson:"type,omitempty" json:"type"`
  265. Format string `bson:"format,omitempty" json:"format"`
  266. }
  267. type Evn3dLight struct {
  268. Direction Vect3 `bson:"direction,omitempty" json:"direction"`
  269. Lum_ratio float64 `bson:"lum_ratio,omitempty" json:"lum_ratio"`
  270. Color Vect3 `bson:"color,omitempty" json:"color"`
  271. Luminosity float64 `bson:"luminosity,omitempty" json:"luminosity"`
  272. Sum float64 `bson:"sum,omitempty" json:"sum"`
  273. Area VectXYWH `bson:"area,omitempty" json:"area"`
  274. Error int32 `bson:"error,omitempty" json:"error"`
  275. Variance float64 `bson:"variance,omitempty" json:"variance"`
  276. }
  277. type Evn3dHdrConf struct {
  278. Textures []*Evn3dTexture `bson:"textures,omitempty" json:"textures"`
  279. WriteByChannel bool `bson:"writeByChannel,omitempty" json:"writeByChannel"`
  280. Lights []*Evn3dLight `bson:"lights,omitempty" json:"lights"`
  281. DiffuseSPH []float64 `bson:"diffuseSPH,omitempty" json:"diffuseSPH"`
  282. }
  283. type CanvasBackground struct {
  284. Id primitive.ObjectID `bson:"_id,omitempty" json:"_id"`
  285. Color *Vect3 `bson:"color,omitempty" json:"color"`
  286. Image *OssType `bson:"image,omitempty" json:"image"`
  287. Type int32 `bson:"type,omitempty" json:"type"`
  288. Order int32 `bson:"order,omitempty" json:"order"`
  289. CreateTime time.Time `bson:"createTime,omitempty" json:"createTime"`
  290. }