Mesh: Replace auto smooth with node group #108014
|
@ -332,8 +332,9 @@ void mesh_render_data_update_normals(MeshRenderData *mr, const eMRDataType data_
|
||||||
}
|
}
|
||||||
if (((data_flag & MR_DATA_LOOP_NOR) &&
|
if (((data_flag & MR_DATA_LOOP_NOR) &&
|
||||||
mr->me->normal_domain_all_info() == ATTR_DOMAIN_CORNER) ||
|
mr->me->normal_domain_all_info() == ATTR_DOMAIN_CORNER) ||
|
||||||
(data_flag & MR_DATA_TAN_LOOP_NOR)) {
|
(data_flag & MR_DATA_TAN_LOOP_NOR))
|
||||||
mr->corner_normals = mr->me->corner_normals();
|
{
|
||||||
|
mr->loop_normals = mr->me->corner_normals();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
@ -365,7 +366,7 @@ void mesh_render_data_update_normals(MeshRenderData *mr, const eMRDataType data_
|
||||||
nullptr,
|
nullptr,
|
||||||
clnors_offset,
|
clnors_offset,
|
||||||
false);
|
false);
|
||||||
mr->corner_normals = mr->bm_loop_normals;
|
mr->loop_normals = mr->bm_loop_normals;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -91,7 +91,7 @@ struct MeshRenderData {
|
||||||
const int *material_indices;
|
const int *material_indices;
|
||||||
blender::Span<blender::float3> vert_normals;
|
blender::Span<blender::float3> vert_normals;
|
||||||
blender::Span<blender::float3> poly_normals;
|
blender::Span<blender::float3> poly_normals;
|
||||||
blender::Span<blender::float3> corner_normals;
|
blender::Span<blender::float3> loop_normals;
|
||||||
const bool *hide_vert;
|
const bool *hide_vert;
|
||||||
const bool *hide_edge;
|
const bool *hide_edge;
|
||||||
const bool *hide_poly;
|
const bool *hide_poly;
|
||||||
|
|
|
@ -41,9 +41,8 @@ static void extract_lnor_iter_poly_bm(const MeshRenderData *mr,
|
||||||
l_iter = l_first = BM_FACE_FIRST_LOOP(f);
|
l_iter = l_first = BM_FACE_FIRST_LOOP(f);
|
||||||
do {
|
do {
|
||||||
const int l_index = BM_elem_index_get(l_iter);
|
const int l_index = BM_elem_index_get(l_iter);
|
||||||
if (!mr->corner_normals.is_empty()) {
|
if (!mr->loop_normals.is_empty()) {
|
||||||
(*(GPUPackedNormal **)data)[l_index] = GPU_normal_convert_i10_v3(
|
(*(GPUPackedNormal **)data)[l_index] = GPU_normal_convert_i10_v3(mr->loop_normals[l_index]);
|
||||||
mr->corner_normals[l_index]);
|
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
if (BM_elem_flag_test(f, BM_ELEM_SMOOTH)) {
|
if (BM_elem_flag_test(f, BM_ELEM_SMOOTH)) {
|
||||||
|
@ -65,8 +64,8 @@ static void extract_lnor_iter_poly_mesh(const MeshRenderData *mr, const int poly
|
||||||
for (const int ml_index : mr->polys[poly_index]) {
|
for (const int ml_index : mr->polys[poly_index]) {
|
||||||
const int vert = mr->corner_verts[ml_index];
|
const int vert = mr->corner_verts[ml_index];
|
||||||
GPUPackedNormal *lnor_data = &(*(GPUPackedNormal **)data)[ml_index];
|
GPUPackedNormal *lnor_data = &(*(GPUPackedNormal **)data)[ml_index];
|
||||||
if (!mr->corner_normals.is_empty()) {
|
if (!mr->loop_normals.is_empty()) {
|
||||||
*lnor_data = GPU_normal_convert_i10_v3(mr->corner_normals[ml_index]);
|
*lnor_data = GPU_normal_convert_i10_v3(mr->loop_normals[ml_index]);
|
||||||
}
|
}
|
||||||
else if (mr->sharp_faces && mr->sharp_faces[poly_index]) {
|
else if (mr->sharp_faces && mr->sharp_faces[poly_index]) {
|
||||||
*lnor_data = GPU_normal_convert_i10_v3(mr->poly_normals[poly_index]);
|
*lnor_data = GPU_normal_convert_i10_v3(mr->poly_normals[poly_index]);
|
||||||
|
@ -164,8 +163,8 @@ static void extract_lnor_hq_iter_poly_bm(const MeshRenderData *mr,
|
||||||
l_iter = l_first = BM_FACE_FIRST_LOOP(f);
|
l_iter = l_first = BM_FACE_FIRST_LOOP(f);
|
||||||
do {
|
do {
|
||||||
const int l_index = BM_elem_index_get(l_iter);
|
const int l_index = BM_elem_index_get(l_iter);
|
||||||
if (!mr->corner_normals.is_empty()) {
|
if (!mr->loop_normals.is_empty()) {
|
||||||
normal_float_to_short_v3(&(*(gpuHQNor **)data)[l_index].x, mr->corner_normals[l_index]);
|
normal_float_to_short_v3(&(*(gpuHQNor **)data)[l_index].x, mr->loop_normals[l_index]);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
if (BM_elem_flag_test(f, BM_ELEM_SMOOTH)) {
|
if (BM_elem_flag_test(f, BM_ELEM_SMOOTH)) {
|
||||||
|
@ -187,8 +186,8 @@ static void extract_lnor_hq_iter_poly_mesh(const MeshRenderData *mr,
|
||||||
for (const int ml_index : mr->polys[poly_index]) {
|
for (const int ml_index : mr->polys[poly_index]) {
|
||||||
const int vert = mr->corner_verts[ml_index];
|
const int vert = mr->corner_verts[ml_index];
|
||||||
gpuHQNor *lnor_data = &(*(gpuHQNor **)data)[ml_index];
|
gpuHQNor *lnor_data = &(*(gpuHQNor **)data)[ml_index];
|
||||||
if (!mr->corner_normals.is_empty()) {
|
if (!mr->loop_normals.is_empty()) {
|
||||||
normal_float_to_short_v3(&lnor_data->x, mr->corner_normals[ml_index]);
|
normal_float_to_short_v3(&lnor_data->x, mr->loop_normals[ml_index]);
|
||||||
}
|
}
|
||||||
else if (mr->sharp_faces && mr->sharp_faces[poly_index]) {
|
else if (mr->sharp_faces && mr->sharp_faces[poly_index]) {
|
||||||
normal_float_to_short_v3(&lnor_data->x, mr->poly_normals[poly_index]);
|
normal_float_to_short_v3(&lnor_data->x, mr->poly_normals[poly_index]);
|
||||||
|
|
|
@ -102,13 +102,12 @@ static void extract_tan_init_common(const MeshRenderData *mr,
|
||||||
short tangent_mask = 0;
|
short tangent_mask = 0;
|
||||||
bool calc_active_tangent = false;
|
bool calc_active_tangent = false;
|
||||||
if (mr->extract_type == MR_EXTRACT_BMESH) {
|
if (mr->extract_type == MR_EXTRACT_BMESH) {
|
||||||
BKE_editmesh_loop_tangent_calc(
|
BKE_editmesh_loop_tangent_calc(mr->edit_bmesh,
|
||||||
mr->edit_bmesh,
|
|
||||||
calc_active_tangent,
|
calc_active_tangent,
|
||||||
r_tangent_names,
|
r_tangent_names,
|
||||||
tan_len,
|
tan_len,
|
||||||
reinterpret_cast<const float(*)[3]>(mr->poly_normals.data()),
|
reinterpret_cast<const float(*)[3]>(mr->poly_normals.data()),
|
||||||
reinterpret_cast<const float(*)[3]>(mr->corner_normals.data()),
|
reinterpret_cast<const float(*)[3]>(mr->loop_normals.data()),
|
||||||
orco,
|
orco,
|
||||||
r_loop_data,
|
r_loop_data,
|
||||||
mr->loop_len,
|
mr->loop_len,
|
||||||
|
@ -128,7 +127,7 @@ static void extract_tan_init_common(const MeshRenderData *mr,
|
||||||
tan_len,
|
tan_len,
|
||||||
reinterpret_cast<const float(*)[3]>(mr->vert_normals.data()),
|
reinterpret_cast<const float(*)[3]>(mr->vert_normals.data()),
|
||||||
reinterpret_cast<const float(*)[3]>(mr->poly_normals.data()),
|
reinterpret_cast<const float(*)[3]>(mr->poly_normals.data()),
|
||||||
reinterpret_cast<const float(*)[3]>(mr->corner_normals.data()),
|
reinterpret_cast<const float(*)[3]>(mr->loop_normals.data()),
|
||||||
orco,
|
orco,
|
||||||
r_loop_data,
|
r_loop_data,
|
||||||
mr->corner_verts.size(),
|
mr->corner_verts.size(),
|
||||||
|
|
Loading…
Reference in New Issue