1. // Created by Saul Espinosa for Redshift 3D
    2. // Modified 01.11.2022
    3. shader SpaceTransform
    4. [[ string label = "Space Transform"]]
    5. (
    6. // Inputs
    7. vector Input = 0
    8. [[ string label = "Input", string page = "Input" ]],
    9. string Type = "point"
    10. [[ string label = "Input Type",
    11. string page = "Input",
    12. string widget = "popup",
    13. string options = "point|vector|normal"]],
    14. string From = "world"
    15. [[ string label = "Input Space",
    16. string page = "Transform",
    17. string widget = "popup",
    18. string options = "world|object|camera|screen"]],
    19. string To = "world"
    20. [[ string label = "Output Space",
    21. string page = "Transform",
    22. string widget = "popup",
    23. string options = "world|object|camera|screen"]],
    24. int Normalize = 0
    25. [[ string widget = "checkBox",
    26. string page = "Transform",
    27. string label = "Normalize",
    28. int connectable = 0 ]],
    29. // Output
    30. output vector Output = 0
    31. [[ string label = "Output", string page = "Output" ]],
    32. )
    33. {
    34. if (Normalize == 0)
    35. // Transform Input to Output
    36. if (Type == "point") Output = transform(From, To, point(Input));
    37. else if (Type == "normal") Output = transform(From, To, normal(Input));
    38. else Output = transform(From, To, Input);else
    39. {
    40. // Transform Input to Normalized Output
    41. if (Type == "point") Output = normalize(transform(From, To, point(Input)));
    42. else if (Type == "normal") Output = normalize(transform(From, To, normal(Input)));
    43. else Output = normalize(transform(From, To, Input));
    44. }
    45. }