Matcap - 图1

    1. // Matcap shader for Redshift 3d by Darby Edelen
    2. // This file is licensed under Apache 2.0 license
    3. shader Matcap
    4. [[ string help = "Matcap NPR Shader",
    5. string label = "Matcap" ]]
    6. (
    7. string fileName="" [[string label="Texture", string widget="filename"]],
    8. float gamma=2.2 [[string label="Gamma", float slidercenter=2.2, float min=0.1, float max=10]],
    9. int mapSpace=0 [[string label="Space",
    10. string widget="mapper",
    11. string options="Screen:0|Camera:1|World:2"]],
    12. float scale=1 [[string label="Scale",
    13. string page="Transform",
    14. int slider=1,
    15. int digits=3,
    16. float slidermin=0,
    17. float slidermax=2]],
    18. float scaleU=1 [[string label="Scale U",
    19. string page="Transform",
    20. int slider=1,
    21. int digits=3,
    22. float slidermin=0,
    23. float slidermax=2]],
    24. float scaleV=1 [[string label="Scale V",
    25. string page="Transform",
    26. int slider=1,
    27. int digits=3,
    28. float slidermin=0,
    29. float slidermax=2]],
    30. float rot=0 [[string label="Rotation",
    31. string page="Transform",
    32. int slider=1,
    33. int digits=5,
    34. float slidermin=0,
    35. float slidermax=360,
    36. string units="degrees"]],
    37. output color outColor=0
    38. )
    39. {
    40. float rsin = 0;
    41. float rcos = 1;
    42. sincos(radians(rot), rsin, rcos);
    43. vector svec = max(vector(scale*scaleU,scale*scaleV,1), vector(0.001));
    44. normal uvOut = transform("camera", N);
    45. if(mapSpace==2) uvOut = N;
    46. uvOut = vector(uvOut.x * rcos - uvOut.y * rsin, uvOut.x * rsin + uvOut.y * rcos, uvOut.z);
    47. if(mapSpace==0){
    48. normal v = transform("camera", I);
    49. uvOut = normalize(vector(dot(vector(-v.z,v.y,v.x), -uvOut), dot(vector(v.x,-v.z,v.y), -uvOut), dot(v, uvOut)));
    50. }
    51. uvOut = (uvOut/svec + 1.0) / 2.0;
    52. color Cout = texture(fileName, uvOut.x, -uvOut.y);
    53. outColor = pow(Cout, gamma);
    54. }