void DisneyLayeredBRDF::evaluate_inputs( const ShadingContext& shading_context, InputEvaluator& input_evaluator, const ShadingPoint& shading_point, const size_t offset) const { char* ptr = reinterpret_cast<char*>(input_evaluator.data()); DisneyBRDFInputValues* values = reinterpret_cast<DisneyBRDFInputValues*>(ptr + offset); memset(values, 0, sizeof(DisneyBRDFInputValues)); Color3d base_color(0.0); for (size_t i = 0, e = m_parent->get_layer_count(); i < e; ++i) { const DisneyMaterialLayer& layer = m_parent->get_layer(i, shading_context.get_thread_index()); layer.evaluate_expressions( shading_point, shading_context.get_oiio_texture_system(), base_color, *values); } // Colors in SeExpr are always in the sRGB color space. base_color = srgb_to_linear_rgb(base_color); values->m_base_color = Color3f(base_color); values->precompute_tint_color(); }
void BSSRDF::evaluate_inputs( const ShadingContext& shading_context, InputEvaluator& input_evaluator, const ShadingPoint& shading_point, const size_t offset) const { input_evaluator.evaluate(get_inputs(), shading_point.get_uv(0), offset); prepare_inputs(input_evaluator.data() + offset); }
T get_value(const InputEvaluator& input_evaluator, const size_t offset) { const uint8* base = static_cast<const uint8*>(input_evaluator.data()); return *reinterpret_cast<const T*>(base + offset); }