Blender V5.0
dice.h
Go to the documentation of this file.
1/* SPDX-FileCopyrightText: 2011-2022 Blender Foundation
2 *
3 * SPDX-License-Identifier: Apache-2.0 */
4
5#pragma once
6
7/* DX11 like EdgeDice implementation, with different tessellation factors for
8 * each edge for watertight tessellation, with subpatch remapping to work with
9 * DiagSplit. For more algorithm details, see the DiagSplit paper or the
10 * ARB_tessellation_shader OpenGL extension, Section 2.X.2. */
11
12#include "util/transform.h"
13#include "util/types.h"
14
15#include "subd/subpatch.h"
16
18
19class Camera;
20class Mesh;
21class Patch;
23class DiagSplit;
24
25struct SubdParams {
26 Mesh *mesh = nullptr;
27 bool ptex = false;
28
29 int test_steps = 3;
31 float dicing_rate = 1.0f;
32 int max_level = 12;
33 Camera *camera = nullptr;
35
36 SubdParams(Mesh *mesh_, bool ptex_ = false) : mesh(mesh_), ptex(ptex_) {}
37};
38
39class EdgeDice {
40 public:
43 int *mesh_triangles = nullptr;
44 int *mesh_shader = nullptr;
45 bool *mesh_smooth = nullptr;
46 float3 *mesh_P = nullptr;
47 float3 *mesh_N = nullptr;
48 float *mesh_ptex_face_id = nullptr;
49 float2 *mesh_ptex_uv = nullptr;
50
51 explicit EdgeDice(const SubdParams &params,
52 const int num_verts,
53 const int num_triangles,
55
56 void dice(const DiagSplit &split);
57
58 protected:
59 void tri_dice(const SubPatch &sub);
60 void quad_dice(const SubPatch &sub);
61
62 void set_vertex(const SubPatch &sub, const int index, const float2 uv);
63 void set_triangle(const SubPatch &sub,
64 const int triangle_index,
65 const int v0,
66 const int v1,
67 const int v2,
68 const float2 uv0,
69 const float2 uv1,
70 const float2 uv2);
71
72 void add_grid_triangles_and_stitch(const SubPatch &sub, const int Mu, const int Mv);
73 void add_triangle_strip(const SubPatch &sub, const int left_edge, const int right_edge);
74
75 float3 eval_projected(const SubPatch &sub, const float2 uv);
76
77 void tri_set_sides(const SubPatch &sub);
78 void quad_set_sides(const SubPatch &sub);
79
80 float quad_area(const float3 &a, const float3 &b, const float3 &c, const float3 &d);
81 float scale_factor(const SubPatch &sub, const int Mu, const int Mv);
82};
83
static void split(const char *text, const char *seps, char ***str, int *count)
ATTR_WARN_UNUSED_RESULT const BMVert * v2
void tri_set_sides(const SubPatch &sub)
Definition dice.cpp:397
void set_vertex(const SubPatch &sub, const int index, const float2 uv)
Definition dice.cpp:96
void quad_dice(const SubPatch &sub)
Definition dice.cpp:370
void add_triangle_strip(const SubPatch &sub, const int left_edge, const int right_edge)
Definition dice.cpp:265
float3 * mesh_N
Definition dice.h:47
float quad_area(const float3 &a, const float3 &b, const float3 &c, const float3 &d)
Definition dice.cpp:59
bool * mesh_smooth
Definition dice.h:45
int * mesh_triangles
Definition dice.h:43
float2 * mesh_ptex_uv
Definition dice.h:49
float * mesh_ptex_face_id
Definition dice.h:48
int * mesh_shader
Definition dice.h:44
float3 eval_projected(const SubPatch &sub, const float2 uv)
Definition dice.cpp:47
float scale_factor(const SubPatch &sub, const int Mu, const int Mv)
Definition dice.cpp:64
void tri_dice(const SubPatch &sub)
Definition dice.cpp:428
SubdAttributeInterpolation & interpolation
Definition dice.h:42
void add_grid_triangles_and_stitch(const SubPatch &sub, const int Mu, const int Mv)
Definition dice.cpp:148
EdgeDice(const SubdParams &params, const int num_verts, const int num_triangles, SubdAttributeInterpolation &interpolation)
Definition dice.cpp:17
void quad_set_sides(const SubPatch &sub)
Definition dice.cpp:336
void set_triangle(const SubPatch &sub, const int triangle_index, const int v0, const int v1, const int v2, const float2 uv0, const float2 uv1, const float2 uv2)
Definition dice.cpp:113
float3 * mesh_P
Definition dice.h:46
SubdParams params
Definition dice.h:41
void dice(const DiagSplit &split)
Definition dice.cpp:663
Definition patch.h:12
#define CCL_NAMESPACE_END
bool ptex
Definition dice.h:27
int max_level
Definition dice.h:32
SubdParams(Mesh *mesh_, bool ptex_=false)
Definition dice.h:36
Mesh * mesh
Definition dice.h:26
Camera * camera
Definition dice.h:33
Transform objecttoworld
Definition dice.h:34
int split_threshold
Definition dice.h:30
float dicing_rate
Definition dice.h:31
int test_steps
Definition dice.h:29
ccl_device_inline Transform transform_identity()
Definition transform.h:322