Changeset View
Changeset View
Standalone View
Standalone View
intern/cycles/kernel/closure/bsdf_toon.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_TOON_H__ | #pragma once | ||||
| #define __BSDF_TOON_H__ | |||||
| CCL_NAMESPACE_BEGIN | CCL_NAMESPACE_BEGIN | ||||
| typedef ccl_addr_space struct ToonBsdf { | typedef ccl_addr_space struct ToonBsdf { | ||||
| SHADER_CLOSURE_BASE; | SHADER_CLOSURE_BASE; | ||||
| float size; | float size; | ||||
| float smooth; | float smooth; | ||||
| } ToonBsdf; | } ToonBsdf; | ||||
| static_assert(sizeof(ShaderClosure) >= sizeof(ToonBsdf), "ToonBsdf is too large!"); | static_assert(sizeof(ShaderClosure) >= sizeof(ToonBsdf), "ToonBsdf is too large!"); | ||||
| /* DIFFUSE TOON */ | /* DIFFUSE TOON */ | ||||
| ccl_device int bsdf_diffuse_toon_setup(ToonBsdf *bsdf) | ccl_device int bsdf_diffuse_toon_setup(ToonBsdf *bsdf) | ||||
| { | { | ||||
| bsdf->type = CLOSURE_BSDF_DIFFUSE_TOON_ID; | bsdf->type = CLOSURE_BSDF_DIFFUSE_TOON_ID; | ||||
| bsdf->size = saturate(bsdf->size); | bsdf->size = saturate(bsdf->size); | ||||
| bsdf->smooth = saturate(bsdf->smooth); | bsdf->smooth = saturate(bsdf->smooth); | ||||
| return SD_BSDF | SD_BSDF_HAS_EVAL; | return SD_BSDF | SD_BSDF_HAS_EVAL; | ||||
| } | } | ||||
| ccl_device bool bsdf_toon_merge(const ShaderClosure *a, const ShaderClosure *b) | |||||
| { | |||||
| const ToonBsdf *bsdf_a = (const ToonBsdf *)a; | |||||
| const ToonBsdf *bsdf_b = (const ToonBsdf *)b; | |||||
| return (isequal_float3(bsdf_a->N, bsdf_b->N)) && (bsdf_a->size == bsdf_b->size) && | |||||
| (bsdf_a->smooth == bsdf_b->smooth); | |||||
| } | |||||
| ccl_device float3 bsdf_toon_get_intensity(float max_angle, float smooth, float angle) | ccl_device float3 bsdf_toon_get_intensity(float max_angle, float smooth, float angle) | ||||
| { | { | ||||
| float is; | float is; | ||||
| if (angle < max_angle) | if (angle < max_angle) | ||||
| is = 1.0f; | is = 1.0f; | ||||
| else if (angle < (max_angle + smooth) && smooth != 0.0f) | else if (angle < (max_angle + smooth) && smooth != 0.0f) | ||||
| is = (1.0f - (angle - max_angle) / smooth); | is = (1.0f - (angle - max_angle) / smooth); | ||||
| ▲ Show 20 Lines • Show All 168 Lines • ▼ Show 20 Lines | #endif | ||||
| else | else | ||||
| *pdf = 0.0f; | *pdf = 0.0f; | ||||
| } | } | ||||
| return LABEL_GLOSSY | LABEL_REFLECT; | return LABEL_GLOSSY | LABEL_REFLECT; | ||||
| } | } | ||||
| CCL_NAMESPACE_END | CCL_NAMESPACE_END | ||||
| #endif /* __BSDF_TOON_H__ */ | |||||