Sidebar.Material.js 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682
  1. import * as THREE from 'three';
  2. import { UIButton, UIInput, UIPanel, UIRow, UISelect, UIText, UITextArea } from './libs/ui.js';
  3. import { SetMaterialCommand } from './commands/SetMaterialCommand.js';
  4. import { SetMaterialValueCommand } from './commands/SetMaterialValueCommand.js';
  5. import { SidebarMaterialBooleanProperty } from './Sidebar.Material.BooleanProperty.js';
  6. import { SidebarMaterialColorProperty } from './Sidebar.Material.ColorProperty.js';
  7. import { SidebarMaterialConstantProperty } from './Sidebar.Material.ConstantProperty.js';
  8. import { SidebarMaterialMapProperty } from './Sidebar.Material.MapProperty.js';
  9. import { SidebarMaterialNumberProperty } from './Sidebar.Material.NumberProperty.js';
  10. import { SidebarMaterialRangeValueProperty } from './Sidebar.Material.RangeValueProperty.js';
  11. import { SidebarMaterialProgram } from './Sidebar.Material.Program.js';
  12. function SidebarMaterial( editor ) {
  13. const signals = editor.signals;
  14. const strings = editor.strings;
  15. let currentObject;
  16. let currentMaterialSlot = 0;
  17. const container = new UIPanel();
  18. container.setBorderTop( '0' );
  19. container.setDisplay( 'none' );
  20. container.setPaddingTop( '20px' );
  21. // Current material slot
  22. const materialSlotRow = new UIRow();
  23. materialSlotRow.add( new UIText( strings.getKey( 'sidebar/material/slot' ) ).setWidth( '90px' ) );
  24. const materialSlotSelect = new UISelect().setWidth( '170px' ).setFontSize( '12px' ).onChange( update );
  25. materialSlotSelect.setOptions( { 0: '' } ).setValue( 0 );
  26. materialSlotRow.add( materialSlotSelect );
  27. container.add( materialSlotRow );
  28. // type
  29. const materialClassRow = new UIRow();
  30. const materialClass = new UISelect().setWidth( '150px' ).setFontSize( '12px' ).onChange( update );
  31. materialClassRow.add( new UIText( strings.getKey( 'sidebar/material/type' ) ).setWidth( '90px' ) );
  32. materialClassRow.add( materialClass );
  33. container.add( materialClassRow );
  34. // uuid
  35. const materialUUIDRow = new UIRow();
  36. const materialUUID = new UIInput().setWidth( '102px' ).setFontSize( '12px' ).setDisabled( true );
  37. const materialUUIDRenew = new UIButton( strings.getKey( 'sidebar/material/new' ) ).setMarginLeft( '7px' );
  38. materialUUIDRenew.onClick( function () {
  39. materialUUID.setValue( THREE.MathUtils.generateUUID() );
  40. update();
  41. } );
  42. materialUUIDRow.add( new UIText( strings.getKey( 'sidebar/material/uuid' ) ).setWidth( '90px' ) );
  43. materialUUIDRow.add( materialUUID );
  44. materialUUIDRow.add( materialUUIDRenew );
  45. container.add( materialUUIDRow );
  46. // name
  47. const materialNameRow = new UIRow();
  48. const materialName = new UIInput().setWidth( '150px' ).setFontSize( '12px' ).onChange( function () {
  49. editor.execute( new SetMaterialValueCommand( editor, editor.selected, 'name', materialName.getValue(), currentMaterialSlot ) );
  50. } );
  51. materialNameRow.add( new UIText( strings.getKey( 'sidebar/material/name' ) ).setWidth( '90px' ) );
  52. materialNameRow.add( materialName );
  53. container.add( materialNameRow );
  54. // program
  55. const materialProgram = new SidebarMaterialProgram( editor, 'vertexShader' );
  56. container.add( materialProgram );
  57. // color
  58. const materialColor = new SidebarMaterialColorProperty( editor, 'color', strings.getKey( 'sidebar/material/color' ) );
  59. container.add( materialColor );
  60. // specular
  61. const materialSpecular = new SidebarMaterialColorProperty( editor, 'specular', strings.getKey( 'sidebar/material/specular' ) );
  62. container.add( materialSpecular );
  63. // shininess
  64. const materialShininess = new SidebarMaterialNumberProperty( editor, 'shininess', strings.getKey( 'sidebar/material/shininess' ) );
  65. container.add( materialShininess );
  66. // emissive
  67. const materialEmissive = new SidebarMaterialColorProperty( editor, 'emissive', strings.getKey( 'sidebar/material/emissive' ) );
  68. container.add( materialEmissive );
  69. // reflectivity
  70. const materialReflectivity = new SidebarMaterialNumberProperty( editor, 'reflectivity', strings.getKey( 'sidebar/material/reflectivity' ) );
  71. container.add( materialReflectivity );
  72. // roughness
  73. const materialRoughness = new SidebarMaterialNumberProperty( editor, 'roughness', strings.getKey( 'sidebar/material/roughness' ), [ 0, 1 ] );
  74. container.add( materialRoughness );
  75. // metalness
  76. const materialMetalness = new SidebarMaterialNumberProperty( editor, 'metalness', strings.getKey( 'sidebar/material/metalness' ), [ 0, 1 ] );
  77. container.add( materialMetalness );
  78. // clearcoat
  79. const materialClearcoat = new SidebarMaterialNumberProperty( editor, 'clearcoat', strings.getKey( 'sidebar/material/clearcoat' ), [ 0, 1 ] );
  80. container.add( materialClearcoat );
  81. // clearcoatRoughness
  82. const materialClearcoatRoughness = new SidebarMaterialNumberProperty( editor, 'clearcoatRoughness', strings.getKey( 'sidebar/material/clearcoatroughness' ), [ 0, 1 ] );
  83. container.add( materialClearcoatRoughness );
  84. // iridescence
  85. const materialIridescence = new SidebarMaterialNumberProperty( editor, 'iridescence', strings.getKey( 'sidebar/material/iridescence' ), [ 0, 1 ] );
  86. container.add( materialIridescence );
  87. // iridescenceIOR
  88. const materialIridescenceIOR = new SidebarMaterialNumberProperty( editor, 'iridescenceIOR', strings.getKey( 'sidebar/material/iridescenceIOR' ), [ 1, 5 ] );
  89. container.add( materialIridescenceIOR );
  90. // iridescenceThicknessMax
  91. const materialIridescenceThicknessMax = new SidebarMaterialRangeValueProperty( editor, 'iridescenceThicknessRange', strings.getKey( 'sidebar/material/iridescenceThicknessMax' ), false, [ 0, Infinity ], 0, 10, 1, 'nm' );
  92. container.add( materialIridescenceThicknessMax );
  93. // sheen
  94. const materialSheen = new SidebarMaterialNumberProperty( editor, 'sheen', strings.getKey( 'sidebar/material/sheen' ), [ 0, 1 ] );
  95. container.add( materialSheen );
  96. // sheen roughness
  97. const materialSheenRoughness = new SidebarMaterialNumberProperty( editor, 'sheenRoughness', strings.getKey( 'sidebar/material/sheenroughness' ), [ 0, 1 ] );
  98. container.add( materialSheenRoughness );
  99. // sheen color
  100. const materialSheenColor = new SidebarMaterialColorProperty( editor, 'sheenColor', strings.getKey( 'sidebar/material/sheencolor' ) );
  101. container.add( materialSheenColor );
  102. // transmission
  103. const materialTransmission = new SidebarMaterialNumberProperty( editor, 'transmission', strings.getKey( 'sidebar/material/transmission' ), [ 0, 1 ] );
  104. container.add( materialTransmission );
  105. // attenuation distance
  106. const materialAttenuationDistance = new SidebarMaterialNumberProperty( editor, 'attenuationDistance', strings.getKey( 'sidebar/material/attenuationDistance' ) );
  107. container.add( materialAttenuationDistance );
  108. // attenuation tint
  109. const materialAttenuationColor = new SidebarMaterialColorProperty( editor, 'attenuationColor', strings.getKey( 'sidebar/material/attenuationColor' ) );
  110. container.add( materialAttenuationColor );
  111. // thickness
  112. const materialThickness = new SidebarMaterialNumberProperty( editor, 'thickness', strings.getKey( 'sidebar/material/thickness' ) );
  113. container.add( materialThickness );
  114. // vertex colors
  115. const materialVertexColors = new SidebarMaterialBooleanProperty( editor, 'vertexColors', strings.getKey( 'sidebar/material/vertexcolors' ) );
  116. container.add( materialVertexColors );
  117. // depth packing
  118. const materialDepthPackingOptions = {
  119. [ THREE.BasicDepthPacking ]: 'Basic',
  120. [ THREE.RGBADepthPacking ]: 'RGBA'
  121. };
  122. const materialDepthPacking = new SidebarMaterialConstantProperty( editor, 'depthPacking', strings.getKey( 'sidebar/material/depthPacking' ), materialDepthPackingOptions );
  123. container.add( materialDepthPacking );
  124. // map
  125. const materialMap = new SidebarMaterialMapProperty( editor, 'map', strings.getKey( 'sidebar/material/map' ) );
  126. container.add( materialMap );
  127. // specular map
  128. const materialSpecularMap = new SidebarMaterialMapProperty( editor, 'specularMap', strings.getKey( 'sidebar/material/specularmap' ) );
  129. container.add( materialSpecularMap );
  130. // emissive map
  131. const materialEmissiveMap = new SidebarMaterialMapProperty( editor, 'emissiveMap', strings.getKey( 'sidebar/material/emissivemap' ) );
  132. container.add( materialEmissiveMap );
  133. // matcap map
  134. const materialMatcapMap = new SidebarMaterialMapProperty( editor, 'matcap', strings.getKey( 'sidebar/material/matcap' ) );
  135. container.add( materialMatcapMap );
  136. // alpha map
  137. const materialAlphaMap = new SidebarMaterialMapProperty( editor, 'alphaMap', strings.getKey( 'sidebar/material/alphamap' ) );
  138. container.add( materialAlphaMap );
  139. // bump map
  140. const materialBumpMap = new SidebarMaterialMapProperty( editor, 'bumpMap', strings.getKey( 'sidebar/material/bumpmap' ) );
  141. container.add( materialBumpMap );
  142. // normal map
  143. const materialNormalMap = new SidebarMaterialMapProperty( editor, 'normalMap', strings.getKey( 'sidebar/material/normalmap' ) );
  144. container.add( materialNormalMap );
  145. // clearcoat map
  146. const materialClearcoatMap = new SidebarMaterialMapProperty( editor, 'clearcoatMap', strings.getKey( 'sidebar/material/clearcoatmap' ) );
  147. container.add( materialClearcoatMap );
  148. // clearcoat normal map
  149. const materialClearcoatNormalMap = new SidebarMaterialMapProperty( editor, 'clearcoatNormalMap', strings.getKey( 'sidebar/material/clearcoatnormalmap' ) );
  150. container.add( materialClearcoatNormalMap );
  151. // clearcoat roughness map
  152. const materialClearcoatRoughnessMap = new SidebarMaterialMapProperty( editor, 'clearcoatRoughnessMap', strings.getKey( 'sidebar/material/clearcoatroughnessmap' ) );
  153. container.add( materialClearcoatRoughnessMap );
  154. // displacement map
  155. const materialDisplacementMap = new SidebarMaterialMapProperty( editor, 'displacementMap', strings.getKey( 'sidebar/material/displacementmap' ) );
  156. container.add( materialDisplacementMap );
  157. // roughness map
  158. const materialRoughnessMap = new SidebarMaterialMapProperty( editor, 'roughnessMap', strings.getKey( 'sidebar/material/roughnessmap' ) );
  159. container.add( materialRoughnessMap );
  160. // metalness map
  161. const materialMetalnessMap = new SidebarMaterialMapProperty( editor, 'metalnessMap', strings.getKey( 'sidebar/material/metalnessmap' ) );
  162. container.add( materialMetalnessMap );
  163. // iridescence map
  164. const materialIridescenceMap = new SidebarMaterialMapProperty( editor, 'iridescenceMap', strings.getKey( 'sidebar/material/iridescencemap' ) );
  165. container.add( materialIridescenceMap );
  166. // sheen color map
  167. const materialSheenColorMap = new SidebarMaterialMapProperty( editor, 'sheenColorMap', strings.getKey( 'sidebar/material/sheencolormap' ) );
  168. container.add( materialSheenColorMap );
  169. // sheen roughness map
  170. const materialSheenRoughnessMap = new SidebarMaterialMapProperty( editor, 'sheenRoughnessMap', strings.getKey( 'sidebar/material/sheenroughnessmap' ) );
  171. container.add( materialSheenRoughnessMap );
  172. // iridescence thickness map
  173. const materialIridescenceThicknessMap = new SidebarMaterialMapProperty( editor, 'iridescenceThicknessMap', strings.getKey( 'sidebar/material/iridescencethicknessmap' ) );
  174. container.add( materialIridescenceThicknessMap );
  175. // env map
  176. const materialEnvMap = new SidebarMaterialMapProperty( editor, 'envMap', strings.getKey( 'sidebar/material/envmap' ) );
  177. container.add( materialEnvMap );
  178. // light map
  179. const materialLightMap = new SidebarMaterialMapProperty( editor, 'lightMap', strings.getKey( 'sidebar/material/lightmap' ) );
  180. container.add( materialLightMap );
  181. // ambient occlusion map
  182. const materialAOMap = new SidebarMaterialMapProperty( editor, 'aoMap', strings.getKey( 'sidebar/material/aomap' ) );
  183. container.add( materialAOMap );
  184. // gradient map
  185. const materialGradientMap = new SidebarMaterialMapProperty( editor, 'gradientMap', strings.getKey( 'sidebar/material/gradientmap' ) );
  186. container.add( materialGradientMap );
  187. // transmission map
  188. const transmissionMap = new SidebarMaterialMapProperty( editor, 'transmissionMap', strings.getKey( 'sidebar/material/transmissionmap' ) );
  189. container.add( transmissionMap );
  190. // thickness map
  191. const thicknessMap = new SidebarMaterialMapProperty( editor, 'thicknessMap', strings.getKey( 'sidebar/material/thicknessmap' ) );
  192. container.add( thicknessMap );
  193. // side
  194. const materialSideOptions = {
  195. 0: 'Front',
  196. 1: 'Back',
  197. 2: 'Double'
  198. };
  199. const materialSide = new SidebarMaterialConstantProperty( editor, 'side', strings.getKey( 'sidebar/material/side' ), materialSideOptions );
  200. container.add( materialSide );
  201. // size
  202. const materialSize = new SidebarMaterialNumberProperty( editor, 'size', strings.getKey( 'sidebar/material/size' ), [ 0, Infinity ] );
  203. container.add( materialSize );
  204. // sizeAttenuation
  205. const materialSizeAttenuation = new SidebarMaterialBooleanProperty( editor, 'sizeAttenuation', strings.getKey( 'sidebar/material/sizeAttenuation' ) );
  206. container.add( materialSizeAttenuation );
  207. // flatShading
  208. const materialFlatShading = new SidebarMaterialBooleanProperty( editor, 'flatShading', strings.getKey( 'sidebar/material/flatShading' ) );
  209. container.add( materialFlatShading );
  210. // blending
  211. const materialBlendingOptions = {
  212. 0: 'No',
  213. 1: 'Normal',
  214. 2: 'Additive',
  215. 3: 'Subtractive',
  216. 4: 'Multiply',
  217. 5: 'Custom'
  218. };
  219. const materialBlending = new SidebarMaterialConstantProperty( editor, 'blending', strings.getKey( 'sidebar/material/blending' ), materialBlendingOptions );
  220. container.add( materialBlending );
  221. // opacity
  222. const materialOpacity = new SidebarMaterialNumberProperty( editor, 'opacity', strings.getKey( 'sidebar/material/opacity' ), [ 0, 1 ] );
  223. container.add( materialOpacity );
  224. // transparent
  225. const materialTransparent = new SidebarMaterialBooleanProperty( editor, 'transparent', strings.getKey( 'sidebar/material/transparent' ) );
  226. container.add( materialTransparent );
  227. // forceSinglePass
  228. const materialForceSinglePass = new SidebarMaterialBooleanProperty( editor, 'forceSinglePass', strings.getKey( 'sidebar/material/forcesinglepass' ) );
  229. container.add( materialForceSinglePass );
  230. // alpha test
  231. const materialAlphaTest = new SidebarMaterialNumberProperty( editor, 'alphaTest', strings.getKey( 'sidebar/material/alphatest' ), [ 0, 1 ] );
  232. container.add( materialAlphaTest );
  233. // depth test
  234. const materialDepthTest = new SidebarMaterialBooleanProperty( editor, 'depthTest', strings.getKey( 'sidebar/material/depthtest' ) );
  235. container.add( materialDepthTest );
  236. // depth write
  237. const materialDepthWrite = new SidebarMaterialBooleanProperty( editor, 'depthWrite', strings.getKey( 'sidebar/material/depthwrite' ) );
  238. container.add( materialDepthWrite );
  239. // wireframe
  240. const materialWireframe = new SidebarMaterialBooleanProperty( editor, 'wireframe', strings.getKey( 'sidebar/material/wireframe' ) );
  241. container.add( materialWireframe );
  242. // userData
  243. const materialUserDataRow = new UIRow();
  244. const materialUserData = new UITextArea().setWidth( '150px' ).setHeight( '40px' ).setFontSize( '12px' ).onChange( update );
  245. materialUserData.onKeyUp( function () {
  246. try {
  247. JSON.parse( materialUserData.getValue() );
  248. materialUserData.dom.classList.add( 'success' );
  249. materialUserData.dom.classList.remove( 'fail' );
  250. } catch ( error ) {
  251. materialUserData.dom.classList.remove( 'success' );
  252. materialUserData.dom.classList.add( 'fail' );
  253. }
  254. } );
  255. materialUserDataRow.add( new UIText( strings.getKey( 'sidebar/material/userdata' ) ).setWidth( '90px' ) );
  256. materialUserDataRow.add( materialUserData );
  257. container.add( materialUserDataRow );
  258. //
  259. function update() {
  260. const previousSelectedSlot = currentMaterialSlot;
  261. currentMaterialSlot = parseInt( materialSlotSelect.getValue() );
  262. if ( currentMaterialSlot !== previousSelectedSlot ) {
  263. editor.signals.materialChanged.dispatch( currentObject, currentMaterialSlot );
  264. }
  265. let material = editor.getObjectMaterial( currentObject, currentMaterialSlot );
  266. if ( material ) {
  267. if ( material.uuid !== undefined && material.uuid !== materialUUID.getValue() ) {
  268. editor.execute( new SetMaterialValueCommand( editor, currentObject, 'uuid', materialUUID.getValue(), currentMaterialSlot ) );
  269. }
  270. if ( material.type !== materialClass.getValue() ) {
  271. material = new materialClasses[ materialClass.getValue() ]();
  272. if ( material.type === 'RawShaderMaterial' ) {
  273. material.vertexShader = vertexShaderVariables + material.vertexShader;
  274. }
  275. if ( Array.isArray( currentObject.material ) ) {
  276. // don't remove the entire multi-material. just the material of the selected slot
  277. editor.removeMaterial( currentObject.material[ currentMaterialSlot ] );
  278. } else {
  279. editor.removeMaterial( currentObject.material );
  280. }
  281. editor.execute( new SetMaterialCommand( editor, currentObject, material, currentMaterialSlot ), 'New Material: ' + materialClass.getValue() );
  282. editor.addMaterial( material );
  283. // TODO Copy other references in the scene graph
  284. // keeping name and UUID then.
  285. // Also there should be means to create a unique
  286. // copy for the current object explicitly and to
  287. // attach the current material to other objects.
  288. }
  289. try {
  290. const userData = JSON.parse( materialUserData.getValue() );
  291. if ( JSON.stringify( material.userData ) != JSON.stringify( userData ) ) {
  292. editor.execute( new SetMaterialValueCommand( editor, currentObject, 'userData', userData, currentMaterialSlot ) );
  293. }
  294. } catch ( exception ) {
  295. console.warn( exception );
  296. }
  297. refreshUI();
  298. }
  299. }
  300. //
  301. function setRowVisibility() {
  302. const material = currentObject.material;
  303. if ( Array.isArray( material ) ) {
  304. materialSlotRow.setDisplay( '' );
  305. } else {
  306. materialSlotRow.setDisplay( 'none' );
  307. }
  308. }
  309. function refreshUI() {
  310. if ( ! currentObject ) return;
  311. let material = currentObject.material;
  312. if ( Array.isArray( material ) ) {
  313. const slotOptions = {};
  314. currentMaterialSlot = Math.max( 0, Math.min( material.length, currentMaterialSlot ) );
  315. for ( let i = 0; i < material.length; i ++ ) {
  316. slotOptions[ i ] = String( i + 1 ) + ': ' + material[ i ].name;
  317. }
  318. materialSlotSelect.setOptions( slotOptions ).setValue( currentMaterialSlot );
  319. }
  320. material = editor.getObjectMaterial( currentObject, currentMaterialSlot );
  321. if ( material.uuid !== undefined ) {
  322. materialUUID.setValue( material.uuid );
  323. }
  324. if ( material.name !== undefined ) {
  325. materialName.setValue( material.name );
  326. }
  327. if ( currentObject.isMesh ) {
  328. materialClass.setOptions( meshMaterialOptions );
  329. } else if ( currentObject.isSprite ) {
  330. materialClass.setOptions( spriteMaterialOptions );
  331. } else if ( currentObject.isPoints ) {
  332. materialClass.setOptions( pointsMaterialOptions );
  333. } else if ( currentObject.isLine ) {
  334. materialClass.setOptions( lineMaterialOptions );
  335. }
  336. materialClass.setValue( material.type );
  337. setRowVisibility();
  338. try {
  339. materialUserData.setValue( JSON.stringify( material.userData, null, ' ' ) );
  340. } catch ( error ) {
  341. console.log( error );
  342. }
  343. materialUserData.setBorderColor( 'transparent' );
  344. materialUserData.setBackgroundColor( '' );
  345. }
  346. // events
  347. signals.objectSelected.add( function ( object ) {
  348. let hasMaterial = false;
  349. if ( object && object.material ) {
  350. hasMaterial = true;
  351. if ( Array.isArray( object.material ) && object.material.length === 0 ) {
  352. hasMaterial = false;
  353. }
  354. }
  355. if ( hasMaterial ) {
  356. currentObject = object;
  357. refreshUI();
  358. container.setDisplay( '' );
  359. } else {
  360. currentObject = null;
  361. container.setDisplay( 'none' );
  362. }
  363. } );
  364. signals.materialChanged.add( refreshUI );
  365. return container;
  366. }
  367. const materialClasses = {
  368. 'LineBasicMaterial': THREE.LineBasicMaterial,
  369. 'LineDashedMaterial': THREE.LineDashedMaterial,
  370. 'MeshBasicMaterial': THREE.MeshBasicMaterial,
  371. 'MeshDepthMaterial': THREE.MeshDepthMaterial,
  372. 'MeshNormalMaterial': THREE.MeshNormalMaterial,
  373. 'MeshLambertMaterial': THREE.MeshLambertMaterial,
  374. 'MeshMatcapMaterial': THREE.MeshMatcapMaterial,
  375. 'MeshPhongMaterial': THREE.MeshPhongMaterial,
  376. 'MeshToonMaterial': THREE.MeshToonMaterial,
  377. 'MeshStandardMaterial': THREE.MeshStandardMaterial,
  378. 'MeshPhysicalMaterial': THREE.MeshPhysicalMaterial,
  379. 'RawShaderMaterial': THREE.RawShaderMaterial,
  380. 'ShaderMaterial': THREE.ShaderMaterial,
  381. 'ShadowMaterial': THREE.ShadowMaterial,
  382. 'SpriteMaterial': THREE.SpriteMaterial,
  383. 'PointsMaterial': THREE.PointsMaterial
  384. };
  385. const vertexShaderVariables = [
  386. 'uniform mat4 projectionMatrix;',
  387. 'uniform mat4 modelViewMatrix;\n',
  388. 'attribute vec3 position;\n\n',
  389. ].join( '\n' );
  390. const meshMaterialOptions = {
  391. 'MeshBasicMaterial': 'MeshBasicMaterial',
  392. 'MeshDepthMaterial': 'MeshDepthMaterial',
  393. 'MeshNormalMaterial': 'MeshNormalMaterial',
  394. 'MeshLambertMaterial': 'MeshLambertMaterial',
  395. 'MeshMatcapMaterial': 'MeshMatcapMaterial',
  396. 'MeshPhongMaterial': 'MeshPhongMaterial',
  397. 'MeshToonMaterial': 'MeshToonMaterial',
  398. 'MeshStandardMaterial': 'MeshStandardMaterial',
  399. 'MeshPhysicalMaterial': 'MeshPhysicalMaterial',
  400. 'RawShaderMaterial': 'RawShaderMaterial',
  401. 'ShaderMaterial': 'ShaderMaterial',
  402. 'ShadowMaterial': 'ShadowMaterial'
  403. };
  404. const lineMaterialOptions = {
  405. 'LineBasicMaterial': 'LineBasicMaterial',
  406. 'LineDashedMaterial': 'LineDashedMaterial',
  407. 'RawShaderMaterial': 'RawShaderMaterial',
  408. 'ShaderMaterial': 'ShaderMaterial'
  409. };
  410. const spriteMaterialOptions = {
  411. 'SpriteMaterial': 'SpriteMaterial',
  412. 'RawShaderMaterial': 'RawShaderMaterial',
  413. 'ShaderMaterial': 'ShaderMaterial'
  414. };
  415. const pointsMaterialOptions = {
  416. 'PointsMaterial': 'PointsMaterial',
  417. 'RawShaderMaterial': 'RawShaderMaterial',
  418. 'ShaderMaterial': 'ShaderMaterial'
  419. };
  420. export { SidebarMaterial };