MarbleVeinNoise - 图1

    1. // Created by Saul Espinosa for Redshift 3D
    2. // Based on * LGVeinedMarble.osl by Shane Ambler
    3. // Modified 01.11.2022
    4. shader MarbleVeinNoise
    5. [[ string help = "Marble Vein Noise Generator",
    6. string label = "Marble Vein Noise" ]]
    7. (
    8. // Input Paramaters
    9. color diffuse_color = 0.0
    10. [[
    11. string label = "Base Color",
    12. string page = "Base"
    13. ]],
    14. color VeinColor = 1.0
    15. [[
    16. string label = "Vein Color",
    17. string page = "Marble Vein"
    18. ]],
    19. float VeinFreq = 1.0
    20. [[
    21. string label = "Vein Frequency" ,
    22. string page = "Marble Vein",
    23. float min = 0, float max = 10
    24. ]],
    25. float VeinLevels = 2.0
    26. [[
    27. string label = "Vein Levels" ,
    28. string page = "Marble Vein",
    29. float min = 0, float max = 25
    30. ]],
    31. float WarpFreq = 1.0
    32. [[
    33. string label = "Warp Frequency" ,
    34. string page = "Marble Vein",
    35. float min = 0, float max = 25
    36. ]],
    37. float Warping = 0.5
    38. [[
    39. string label = "Vein Warping" ,
    40. string page = "Marble Vein",
    41. float min = 0, float max = 25
    42. ]],
    43. float Sharpness = 8.0
    44. [[
    45. string label = "Vein Sharpness" ,
    46. string page = "Marble Vein",
    47. float min = 0, float max = 25
    48. ]],
    49. int Space = 1
    50. [[
    51. string page = "Co-ordinates",
    52. string widget = "mapper",
    53. string options = "World:0|Object:1|Fixed:2",
    54. int connectable = 0
    55. ]],
    56. vector Origin = 0
    57. [[
    58. string page = "Co-ordinates",
    59. ]],
    60. // Output Noise
    61. output color outColor = 1
    62. )
    63. {
    64. // Define Noise
    65. #define snoise(x) (2*noise(x)-1)
    66. color Ct;
    67. point Nf;
    68. point PP, offset;
    69. float i, turb, freq, j;
    70. float turbsum;
    71. if (Space == 0)
    72. PP = P + Origin;
    73. else if (Space == 1)
    74. PP = transform("object", P) + Origin;
    75. else
    76. PP = Origin;
    77. /* perturb the lookup */
    78. freq = 1;
    79. offset = 0;
    80. for (i = 0; i < 6; i += 1) {
    81. offset += 2 * Warping * ( noise (WarpFreq * freq * PP) - 0.5) / freq;
    82. freq *= 2;
    83. }
    84. PP += offset;
    85. /* Now calculate the veining function for the lookup area */
    86. turbsum = 0; freq = 1;
    87. PP *= VeinFreq;
    88. for (i = 0; i < VeinLevels; i += 1) {
    89. turb = abs (snoise (PP));
    90. turb = pow (smoothstep (0.8, 1, 1 - turb), Sharpness) / freq;
    91. turbsum += (1-turbsum) * turb;
    92. freq *= 3;
    93. PP *= 3;
    94. }
    95. // Output
    96. outColor = mix (diffuse_color, VeinColor, turbsum);
    97. }