PageRenderTime 58ms CodeModel.GetById 30ms RepoModel.GetById 0ms app.codeStats 0ms

/intern/cycles/render/nodes.h

https://gitlab.com/mano_wii/blender
C Header | 655 lines | 483 code | 152 blank | 20 comment | 0 complexity | 68f8b18fdba5391c6bbb8ee07b247fb3 MD5 | raw file
  1. /*
  2. * Copyright 2011-2013 Blender Foundation
  3. *
  4. * Licensed under the Apache License, Version 2.0 (the "License");
  5. * you may not use this file except in compliance with the License.
  6. * You may obtain a copy of the License at
  7. *
  8. * http://www.apache.org/licenses/LICENSE-2.0
  9. *
  10. * Unless required by applicable law or agreed to in writing, software
  11. * distributed under the License is distributed on an "AS IS" BASIS,
  12. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  13. * See the License for the specific language governing permissions and
  14. * limitations under the License
  15. */
  16. #ifndef __NODES_H__
  17. #define __NODES_H__
  18. #include "graph.h"
  19. #include "util_string.h"
  20. CCL_NAMESPACE_BEGIN
  21. class ImageManager;
  22. class Shader;
  23. /* Texture Mapping */
  24. class TextureMapping {
  25. public:
  26. TextureMapping();
  27. Transform compute_transform();
  28. bool skip();
  29. void compile(SVMCompiler& compiler, int offset_in, int offset_out);
  30. void compile(OSLCompiler &compiler);
  31. float3 translation;
  32. float3 rotation;
  33. float3 scale;
  34. float3 min, max;
  35. bool use_minmax;
  36. enum Type { POINT = 0, TEXTURE = 1, VECTOR = 2, NORMAL = 3 };
  37. Type type;
  38. enum Mapping { NONE = 0, X = 1, Y = 2, Z = 3 };
  39. Mapping x_mapping, y_mapping, z_mapping;
  40. enum Projection { FLAT, CUBE, TUBE, SPHERE };
  41. Projection projection;
  42. };
  43. /* Nodes */
  44. class TextureNode : public ShaderNode {
  45. public:
  46. TextureNode(const char *name_) : ShaderNode(name_) {}
  47. TextureMapping tex_mapping;
  48. };
  49. class ImageTextureNode : public TextureNode {
  50. public:
  51. SHADER_NODE_NO_CLONE_CLASS(ImageTextureNode)
  52. ~ImageTextureNode();
  53. ShaderNode *clone() const;
  54. void attributes(Shader *shader, AttributeRequestSet *attributes);
  55. ImageManager *image_manager;
  56. int slot;
  57. int is_float;
  58. bool is_linear;
  59. bool use_alpha;
  60. string filename;
  61. void *builtin_data;
  62. ustring color_space;
  63. ustring projection;
  64. InterpolationType interpolation;
  65. float projection_blend;
  66. bool animated;
  67. static ShaderEnum color_space_enum;
  68. static ShaderEnum projection_enum;
  69. };
  70. class EnvironmentTextureNode : public TextureNode {
  71. public:
  72. SHADER_NODE_NO_CLONE_CLASS(EnvironmentTextureNode)
  73. ~EnvironmentTextureNode();
  74. ShaderNode *clone() const;
  75. void attributes(Shader *shader, AttributeRequestSet *attributes);
  76. ImageManager *image_manager;
  77. int slot;
  78. int is_float;
  79. bool is_linear;
  80. bool use_alpha;
  81. string filename;
  82. void *builtin_data;
  83. ustring color_space;
  84. ustring projection;
  85. bool animated;
  86. static ShaderEnum color_space_enum;
  87. static ShaderEnum projection_enum;
  88. };
  89. class SkyTextureNode : public TextureNode {
  90. public:
  91. SHADER_NODE_CLASS(SkyTextureNode)
  92. float3 sun_direction;
  93. float turbidity;
  94. float ground_albedo;
  95. ustring type;
  96. static ShaderEnum type_enum;
  97. };
  98. class OutputNode : public ShaderNode {
  99. public:
  100. SHADER_NODE_CLASS(OutputNode)
  101. };
  102. class GradientTextureNode : public TextureNode {
  103. public:
  104. SHADER_NODE_CLASS(GradientTextureNode)
  105. ustring type;
  106. static ShaderEnum type_enum;
  107. };
  108. class NoiseTextureNode : public TextureNode {
  109. public:
  110. SHADER_NODE_CLASS(NoiseTextureNode)
  111. };
  112. class VoronoiTextureNode : public TextureNode {
  113. public:
  114. SHADER_NODE_CLASS(VoronoiTextureNode)
  115. ustring coloring;
  116. static ShaderEnum coloring_enum;
  117. };
  118. class MusgraveTextureNode : public TextureNode {
  119. public:
  120. SHADER_NODE_CLASS(MusgraveTextureNode)
  121. ustring type;
  122. static ShaderEnum type_enum;
  123. };
  124. class WaveTextureNode : public TextureNode {
  125. public:
  126. SHADER_NODE_CLASS(WaveTextureNode)
  127. ustring type;
  128. static ShaderEnum type_enum;
  129. };
  130. class MagicTextureNode : public TextureNode {
  131. public:
  132. SHADER_NODE_CLASS(MagicTextureNode)
  133. int depth;
  134. };
  135. class CheckerTextureNode : public TextureNode {
  136. public:
  137. SHADER_NODE_CLASS(CheckerTextureNode)
  138. };
  139. class BrickTextureNode : public TextureNode {
  140. public:
  141. SHADER_NODE_CLASS(BrickTextureNode)
  142. float offset, squash;
  143. int offset_frequency, squash_frequency;
  144. };
  145. class MappingNode : public ShaderNode {
  146. public:
  147. SHADER_NODE_CLASS(MappingNode)
  148. TextureMapping tex_mapping;
  149. };
  150. class ConvertNode : public ShaderNode {
  151. public:
  152. ConvertNode(ShaderSocketType from, ShaderSocketType to, bool autoconvert = false);
  153. SHADER_NODE_BASE_CLASS(ConvertNode)
  154. ShaderSocketType from, to;
  155. };
  156. class ProxyNode : public ShaderNode {
  157. public:
  158. ProxyNode(ShaderSocketType type);
  159. SHADER_NODE_BASE_CLASS(ProxyNode)
  160. ShaderSocketType type;
  161. };
  162. class BsdfNode : public ShaderNode {
  163. public:
  164. BsdfNode(bool scattering = false);
  165. SHADER_NODE_BASE_CLASS(BsdfNode);
  166. bool has_spatial_varying() { return true; }
  167. void compile(SVMCompiler& compiler, ShaderInput *param1, ShaderInput *param2, ShaderInput *param3 = NULL, ShaderInput *param4 = NULL);
  168. ClosureType closure;
  169. bool scattering;
  170. };
  171. class AnisotropicBsdfNode : public BsdfNode {
  172. public:
  173. SHADER_NODE_CLASS(AnisotropicBsdfNode)
  174. ustring distribution;
  175. static ShaderEnum distribution_enum;
  176. void attributes(Shader *shader, AttributeRequestSet *attributes);
  177. };
  178. class DiffuseBsdfNode : public BsdfNode {
  179. public:
  180. SHADER_NODE_CLASS(DiffuseBsdfNode)
  181. };
  182. class TranslucentBsdfNode : public BsdfNode {
  183. public:
  184. SHADER_NODE_CLASS(TranslucentBsdfNode)
  185. };
  186. class TransparentBsdfNode : public BsdfNode {
  187. public:
  188. SHADER_NODE_CLASS(TransparentBsdfNode)
  189. bool has_surface_transparent() { return true; }
  190. };
  191. class VelvetBsdfNode : public BsdfNode {
  192. public:
  193. SHADER_NODE_CLASS(VelvetBsdfNode)
  194. };
  195. class GlossyBsdfNode : public BsdfNode {
  196. public:
  197. SHADER_NODE_CLASS(GlossyBsdfNode)
  198. ustring distribution;
  199. static ShaderEnum distribution_enum;
  200. };
  201. class GlassBsdfNode : public BsdfNode {
  202. public:
  203. SHADER_NODE_CLASS(GlassBsdfNode)
  204. ustring distribution;
  205. static ShaderEnum distribution_enum;
  206. };
  207. class RefractionBsdfNode : public BsdfNode {
  208. public:
  209. SHADER_NODE_CLASS(RefractionBsdfNode)
  210. ustring distribution;
  211. static ShaderEnum distribution_enum;
  212. };
  213. class ToonBsdfNode : public BsdfNode {
  214. public:
  215. SHADER_NODE_CLASS(ToonBsdfNode)
  216. ustring component;
  217. static ShaderEnum component_enum;
  218. };
  219. class SubsurfaceScatteringNode : public BsdfNode {
  220. public:
  221. SHADER_NODE_CLASS(SubsurfaceScatteringNode)
  222. bool has_surface_bssrdf() { return true; }
  223. bool has_bssrdf_bump();
  224. bool has_spatial_varying() { return true; }
  225. static ShaderEnum falloff_enum;
  226. };
  227. class EmissionNode : public ShaderNode {
  228. public:
  229. SHADER_NODE_CLASS(EmissionNode)
  230. bool has_surface_emission() { return true; }
  231. bool has_spatial_varying() { return true; }
  232. };
  233. class BackgroundNode : public ShaderNode {
  234. public:
  235. SHADER_NODE_CLASS(BackgroundNode)
  236. };
  237. class HoldoutNode : public ShaderNode {
  238. public:
  239. SHADER_NODE_CLASS(HoldoutNode)
  240. };
  241. class AmbientOcclusionNode : public ShaderNode {
  242. public:
  243. SHADER_NODE_CLASS(AmbientOcclusionNode)
  244. bool has_spatial_varying() { return true; }
  245. };
  246. class VolumeNode : public ShaderNode {
  247. public:
  248. SHADER_NODE_CLASS(VolumeNode)
  249. void compile(SVMCompiler& compiler, ShaderInput *param1, ShaderInput *param2);
  250. ClosureType closure;
  251. };
  252. class AbsorptionVolumeNode : public VolumeNode {
  253. public:
  254. SHADER_NODE_CLASS(AbsorptionVolumeNode)
  255. };
  256. class ScatterVolumeNode : public VolumeNode {
  257. public:
  258. SHADER_NODE_CLASS(ScatterVolumeNode)
  259. };
  260. class HairBsdfNode : public BsdfNode {
  261. public:
  262. SHADER_NODE_CLASS(HairBsdfNode)
  263. ustring component;
  264. static ShaderEnum component_enum;
  265. };
  266. class GeometryNode : public ShaderNode {
  267. public:
  268. SHADER_NODE_CLASS(GeometryNode)
  269. void attributes(Shader *shader, AttributeRequestSet *attributes);
  270. bool has_spatial_varying() { return true; }
  271. };
  272. class TextureCoordinateNode : public ShaderNode {
  273. public:
  274. SHADER_NODE_CLASS(TextureCoordinateNode)
  275. void attributes(Shader *shader, AttributeRequestSet *attributes);
  276. bool has_spatial_varying() { return true; }
  277. bool from_dupli;
  278. };
  279. class UVMapNode : public ShaderNode {
  280. public:
  281. SHADER_NODE_CLASS(UVMapNode)
  282. void attributes(Shader *shader, AttributeRequestSet *attributes);
  283. bool has_spatial_varying() { return true; }
  284. ustring attribute;
  285. bool from_dupli;
  286. };
  287. class LightPathNode : public ShaderNode {
  288. public:
  289. SHADER_NODE_CLASS(LightPathNode)
  290. };
  291. class LightFalloffNode : public ShaderNode {
  292. public:
  293. SHADER_NODE_CLASS(LightFalloffNode)
  294. bool has_spatial_varying() { return true; }
  295. };
  296. class ObjectInfoNode : public ShaderNode {
  297. public:
  298. SHADER_NODE_CLASS(ObjectInfoNode)
  299. };
  300. class ParticleInfoNode : public ShaderNode {
  301. public:
  302. SHADER_NODE_CLASS(ParticleInfoNode)
  303. void attributes(Shader *shader, AttributeRequestSet *attributes);
  304. };
  305. class HairInfoNode : public ShaderNode {
  306. public:
  307. SHADER_NODE_CLASS(HairInfoNode)
  308. void attributes(Shader *shader, AttributeRequestSet *attributes);
  309. bool has_spatial_varying() { return true; }
  310. };
  311. class ValueNode : public ShaderNode {
  312. public:
  313. SHADER_NODE_CLASS(ValueNode)
  314. float value;
  315. };
  316. class ColorNode : public ShaderNode {
  317. public:
  318. SHADER_NODE_CLASS(ColorNode)
  319. float3 value;
  320. };
  321. class AddClosureNode : public ShaderNode {
  322. public:
  323. SHADER_NODE_CLASS(AddClosureNode)
  324. };
  325. class MixClosureNode : public ShaderNode {
  326. public:
  327. SHADER_NODE_CLASS(MixClosureNode)
  328. };
  329. class MixClosureWeightNode : public ShaderNode {
  330. public:
  331. SHADER_NODE_CLASS(MixClosureWeightNode);
  332. };
  333. class InvertNode : public ShaderNode {
  334. public:
  335. SHADER_NODE_CLASS(InvertNode)
  336. };
  337. class MixNode : public ShaderNode {
  338. public:
  339. SHADER_NODE_CLASS(MixNode)
  340. bool use_clamp;
  341. ustring type;
  342. static ShaderEnum type_enum;
  343. };
  344. class CombineRGBNode : public ShaderNode {
  345. public:
  346. SHADER_NODE_CLASS(CombineRGBNode)
  347. };
  348. class CombineHSVNode : public ShaderNode {
  349. public:
  350. SHADER_NODE_CLASS(CombineHSVNode)
  351. };
  352. class CombineXYZNode : public ShaderNode {
  353. public:
  354. SHADER_NODE_CLASS(CombineXYZNode)
  355. };
  356. class GammaNode : public ShaderNode {
  357. public:
  358. SHADER_NODE_CLASS(GammaNode)
  359. };
  360. class BrightContrastNode : public ShaderNode {
  361. public:
  362. SHADER_NODE_CLASS(BrightContrastNode)
  363. };
  364. class SeparateRGBNode : public ShaderNode {
  365. public:
  366. SHADER_NODE_CLASS(SeparateRGBNode)
  367. };
  368. class SeparateHSVNode : public ShaderNode {
  369. public:
  370. SHADER_NODE_CLASS(SeparateHSVNode)
  371. };
  372. class SeparateXYZNode : public ShaderNode {
  373. public:
  374. SHADER_NODE_CLASS(SeparateXYZNode)
  375. };
  376. class HSVNode : public ShaderNode {
  377. public:
  378. SHADER_NODE_CLASS(HSVNode)
  379. };
  380. class AttributeNode : public ShaderNode {
  381. public:
  382. SHADER_NODE_CLASS(AttributeNode)
  383. void attributes(Shader *shader, AttributeRequestSet *attributes);
  384. bool has_spatial_varying() { return true; }
  385. ustring attribute;
  386. };
  387. class CameraNode : public ShaderNode {
  388. public:
  389. SHADER_NODE_CLASS(CameraNode)
  390. bool has_spatial_varying() { return true; }
  391. };
  392. class FresnelNode : public ShaderNode {
  393. public:
  394. SHADER_NODE_CLASS(FresnelNode)
  395. bool has_spatial_varying() { return true; }
  396. };
  397. class LayerWeightNode : public ShaderNode {
  398. public:
  399. SHADER_NODE_CLASS(LayerWeightNode)
  400. bool has_spatial_varying() { return true; }
  401. };
  402. class WireframeNode : public ShaderNode {
  403. public:
  404. SHADER_NODE_CLASS(WireframeNode)
  405. bool has_spatial_varying() { return true; }
  406. bool use_pixel_size;
  407. };
  408. class WavelengthNode : public ShaderNode {
  409. public:
  410. SHADER_NODE_CLASS(WavelengthNode)
  411. };
  412. class BlackbodyNode : public ShaderNode {
  413. public:
  414. SHADER_NODE_CLASS(BlackbodyNode)
  415. bool has_converter_blackbody() { return true; }
  416. };
  417. class MathNode : public ShaderNode {
  418. public:
  419. SHADER_NODE_CLASS(MathNode)
  420. bool use_clamp;
  421. ustring type;
  422. static ShaderEnum type_enum;
  423. };
  424. class NormalNode : public ShaderNode {
  425. public:
  426. SHADER_NODE_CLASS(NormalNode)
  427. float3 direction;
  428. };
  429. class VectorMathNode : public ShaderNode {
  430. public:
  431. SHADER_NODE_CLASS(VectorMathNode)
  432. ustring type;
  433. static ShaderEnum type_enum;
  434. };
  435. class VectorTransformNode : public ShaderNode {
  436. public:
  437. SHADER_NODE_CLASS(VectorTransformNode)
  438. ustring type;
  439. ustring convert_from;
  440. ustring convert_to;
  441. static ShaderEnum type_enum;
  442. static ShaderEnum convert_space_enum;
  443. };
  444. class BumpNode : public ShaderNode {
  445. public:
  446. SHADER_NODE_CLASS(BumpNode)
  447. bool has_spatial_varying() { return true; }
  448. bool invert;
  449. };
  450. class RGBCurvesNode : public ShaderNode {
  451. public:
  452. SHADER_NODE_CLASS(RGBCurvesNode)
  453. float4 curves[RAMP_TABLE_SIZE];
  454. };
  455. class VectorCurvesNode : public ShaderNode {
  456. public:
  457. SHADER_NODE_CLASS(VectorCurvesNode)
  458. float4 curves[RAMP_TABLE_SIZE];
  459. };
  460. class RGBRampNode : public ShaderNode {
  461. public:
  462. SHADER_NODE_CLASS(RGBRampNode)
  463. float4 ramp[RAMP_TABLE_SIZE];
  464. bool interpolate;
  465. };
  466. class SetNormalNode : public ShaderNode {
  467. public:
  468. SHADER_NODE_CLASS(SetNormalNode)
  469. };
  470. class OSLScriptNode : public ShaderNode {
  471. public:
  472. SHADER_NODE_CLASS(OSLScriptNode)
  473. /* ideally we could beter detect this, but we can't query this now */
  474. bool has_spatial_varying() { return true; }
  475. string filepath;
  476. string bytecode_hash;
  477. /* ShaderInput/ShaderOutput only stores a shallow string copy (const char *)!
  478. * The actual socket names have to be stored externally to avoid memory errors. */
  479. vector<ustring> input_names;
  480. vector<ustring> output_names;
  481. };
  482. class NormalMapNode : public ShaderNode {
  483. public:
  484. SHADER_NODE_CLASS(NormalMapNode)
  485. void attributes(Shader *shader, AttributeRequestSet *attributes);
  486. bool has_spatial_varying() { return true; }
  487. ustring space;
  488. static ShaderEnum space_enum;
  489. ustring attribute;
  490. };
  491. class TangentNode : public ShaderNode {
  492. public:
  493. SHADER_NODE_CLASS(TangentNode)
  494. void attributes(Shader *shader, AttributeRequestSet *attributes);
  495. bool has_spatial_varying() { return true; }
  496. ustring direction_type;
  497. static ShaderEnum direction_type_enum;
  498. ustring axis;
  499. static ShaderEnum axis_enum;
  500. ustring attribute;
  501. };
  502. CCL_NAMESPACE_END
  503. #endif /* __NODES_H__ */