Changeset View
Changeset View
Standalone View
Standalone View
intern/cycles/kernel/closure/bsdf_hair.h
| Show All 24 Lines | |||||
| * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT | * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT | ||||
| * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, | * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, | ||||
| * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY | * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY | ||||
| * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||||
| * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | ||||
| * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||||
| */ | */ | ||||
| #ifndef __BSDF_HAIR_H__ | #pragma once | ||||
| #define __BSDF_HAIR_H__ | |||||
| CCL_NAMESPACE_BEGIN | CCL_NAMESPACE_BEGIN | ||||
| typedef ccl_addr_space struct HairBsdf { | typedef ccl_addr_space struct HairBsdf { | ||||
| SHADER_CLOSURE_BASE; | SHADER_CLOSURE_BASE; | ||||
| float3 T; | float3 T; | ||||
| float roughness1; | float roughness1; | ||||
| Show All 14 Lines | |||||
| ccl_device int bsdf_hair_transmission_setup(HairBsdf *bsdf) | ccl_device int bsdf_hair_transmission_setup(HairBsdf *bsdf) | ||||
| { | { | ||||
| bsdf->type = CLOSURE_BSDF_HAIR_TRANSMISSION_ID; | bsdf->type = CLOSURE_BSDF_HAIR_TRANSMISSION_ID; | ||||
| bsdf->roughness1 = clamp(bsdf->roughness1, 0.001f, 1.0f); | bsdf->roughness1 = clamp(bsdf->roughness1, 0.001f, 1.0f); | ||||
| bsdf->roughness2 = clamp(bsdf->roughness2, 0.001f, 1.0f); | bsdf->roughness2 = clamp(bsdf->roughness2, 0.001f, 1.0f); | ||||
| return SD_BSDF | SD_BSDF_HAS_EVAL; | return SD_BSDF | SD_BSDF_HAS_EVAL; | ||||
| } | } | ||||
| ccl_device bool bsdf_hair_merge(const ShaderClosure *a, const ShaderClosure *b) | |||||
| { | |||||
| const HairBsdf *bsdf_a = (const HairBsdf *)a; | |||||
| const HairBsdf *bsdf_b = (const HairBsdf *)b; | |||||
| return (isequal_float3(bsdf_a->T, bsdf_b->T)) && (bsdf_a->roughness1 == bsdf_b->roughness1) && | |||||
| (bsdf_a->roughness2 == bsdf_b->roughness2) && (bsdf_a->offset == bsdf_b->offset); | |||||
| } | |||||
| ccl_device float3 bsdf_hair_reflection_eval_reflect(const ShaderClosure *sc, | ccl_device float3 bsdf_hair_reflection_eval_reflect(const ShaderClosure *sc, | ||||
| const float3 I, | const float3 I, | ||||
| const float3 omega_in, | const float3 omega_in, | ||||
| float *pdf) | float *pdf) | ||||
| { | { | ||||
| const HairBsdf *bsdf = (const HairBsdf *)sc; | const HairBsdf *bsdf = (const HairBsdf *)sc; | ||||
| float offset = bsdf->offset; | float offset = bsdf->offset; | ||||
| float3 Tg = bsdf->T; | float3 Tg = bsdf->T; | ||||
| ▲ Show 20 Lines • Show All 222 Lines • ▼ Show 20 Lines | #endif | ||||
| * is involved here. | * is involved here. | ||||
| */ | */ | ||||
| kernel_assert(dot(locy, *omega_in) < 1e-4f); | kernel_assert(dot(locy, *omega_in) < 1e-4f); | ||||
| return LABEL_TRANSMIT | LABEL_GLOSSY; | return LABEL_TRANSMIT | LABEL_GLOSSY; | ||||
| } | } | ||||
| CCL_NAMESPACE_END | CCL_NAMESPACE_END | ||||
| #endif /* __BSDF_HAIR_H__ */ | |||||