emissive.h 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. /*
  2. * Adapted from Open Shading Language with this license:
  3. *
  4. * Copyright (c) 2009-2010 Sony Pictures Imageworks Inc., et al.
  5. * All Rights Reserved.
  6. *
  7. * Modifications Copyright 2011, Blender Foundation.
  8. *
  9. * Redistribution and use in source and binary forms, with or without
  10. * modification, are permitted provided that the following conditions are
  11. * met:
  12. * * Redistributions of source code must retain the above copyright
  13. * notice, this list of conditions and the following disclaimer.
  14. * * Redistributions in binary form must reproduce the above copyright
  15. * notice, this list of conditions and the following disclaimer in the
  16. * documentation and/or other materials provided with the distribution.
  17. * * Neither the name of Sony Pictures Imageworks nor the names of its
  18. * contributors may be used to endorse or promote products derived from
  19. * this software without specific prior written permission.
  20. * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
  21. * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
  22. * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
  23. * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
  24. * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  25. * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  26. * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
  27. * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
  28. * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
  29. * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
  30. * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  31. */
  32. CCL_NAMESPACE_BEGIN
  33. /* BACKGROUND CLOSURE */
  34. ccl_device void background_setup(ShaderData *sd, const float3 weight)
  35. {
  36. if (sd->flag & SD_EMISSION) {
  37. sd->closure_emission_background += weight;
  38. }
  39. else {
  40. sd->flag |= SD_EMISSION;
  41. sd->closure_emission_background = weight;
  42. }
  43. }
  44. /* EMISSION CLOSURE */
  45. ccl_device void emission_setup(ShaderData *sd, const float3 weight)
  46. {
  47. if (sd->flag & SD_EMISSION) {
  48. sd->closure_emission_background += weight;
  49. }
  50. else {
  51. sd->flag |= SD_EMISSION;
  52. sd->closure_emission_background = weight;
  53. }
  54. }
  55. /* return the probability distribution function in the direction I,
  56. * given the parameters and the light's surface normal. This MUST match
  57. * the PDF computed by sample(). */
  58. ccl_device float emissive_pdf(const float3 Ng, const float3 I)
  59. {
  60. float cosNO = fabsf(dot(Ng, I));
  61. return (cosNO > 0.0f) ? 1.0f : 0.0f;
  62. }
  63. ccl_device void emissive_sample(
  64. const float3 Ng, float randu, float randv, float3 *omega_out, float *pdf)
  65. {
  66. /* todo: not implemented and used yet */
  67. }
  68. ccl_device float3 emissive_simple_eval(const float3 Ng, const float3 I)
  69. {
  70. float res = emissive_pdf(Ng, I);
  71. return make_float3(res, res, res);
  72. }
  73. CCL_NAMESPACE_END