Subdivide SOP
پرش به ناوبری | پرش به جستجو
خلاصه
Subdivide SOP یک سطح چندضلعی (Polygon Surface) ورودی را میگیرد (که میتواند به یک یا هر دو ورودی متصل شود) و هر وجه را تقسیم میکند تا یک سطح چندضلعی صاف با استفاده از الگوریتم تقسیمبندی Catmull-Clark ایجاد کند.
این SOP مخصوصاً برای جلوگیری از ظاهر زاویهدار که اغلب در مدلهای چندضلعی دیده میشود، مفید است – بدون اینکه نیاز به اضافه کردن هندسه اضافی به کل شیء باشد.
برای بهترین نتیجه، چندضلعیها باید کوژ (Convex) و تقریباً یکنواخت توزیعشده باشند.
سطوح تقسیمشده همچنین به شما امکان میدهند سطح صاف را بر اساس یک شکل کنترل چندضلعی ایجاد کنید.
همانطور که شکل کنترل تغییر میکند، شکل صاف داخلی نیز تغییر میکند.
PythonIcon.png
کلاس: subdivideSOP_Class
فهرست مطالب
-
خلاصه
-
Creases و Cracks
2.1 Creases
2.2 الگوریتم Crease
2.3 بستن ترکها (Closing Cracks) -
پارامترها – صفحه Page
-
مثال
-
ورودیهای اپراتور
-
کانالهای Info CHOP
6.1 کانالهای اطلاعاتی مشترک SOP
6.2 کانالهای اطلاعاتی مشترک اپراتورها
Creases و Cracks
Creases
Creaseها قدرت کشش وجههای چندضلعی روی سطح تقسیمشده را کنترل میکنند، درست مانند مغناطیسی که سطح را به سمت چندضلعی مرجع میکشد.
میتوان آنها را به صورت انتخابی با استفاده از فیلد Creases برای مشخص کردن گروه ورودی اعمال کرد.
Creaseها با کنترل قدرت کشش وجهها روی سطح تقسیمشده کار میکنند.
تصویر زیر نشان میدهد که وقتی Crease Weight مقادیر 0، 1 و 2 داشته باشد (از چپ به راست خوانده میشود) چه اتفاقی میافتد:
-
با افزایش وزن، اثر کشش قویتر میشود و شکل به چندضلعی مرجع نزدیکتر میشود.
Subdivision-Creases.gif
الگوریتم Crease
اگر ورودی دوم وجود داشته باشد:
-
اگر دکمه Override فعال باشد، هر لبه تعریفشده در ورودی دوم Crease Weight خود را به مقدار Override تنظیم میکند.
-
اگر ویژگی Vertex به نام “creaseweight” روی ورودی دوم وجود داشته باشد، هر لبهی متناظر در ورودی اول Crease Weight برابر با حداکثر مقدار Vertex مشترک تعیین میشود.
-
اگر ویژگی Primitive به نام “creaseweight” روی ورودی دوم وجود داشته باشد، هر چندضلعی در ورودی دوم لبههای متناظر را به وزن مناسب تنظیم میکند.
اگر ورودی دوم وجود نداشته باشد:
-
اگر Override مشخص شده باشد، مقدار Override برای تمام لبهها استفاده میشود.
-
اگر ویژگی Vertex “creaseweight” وجود داشته باشد، این ویژگی برای تعیین Crease Weight روی لبهها استفاده میشود.
-
اگر ویژگی Primitive “creaseweight” وجود داشته باشد، این ویژگی برای تعیین Crease Weight سطح تقسیمشده استفاده میشود.
نکته: هنگام تعریف Crease Weight روی لبههای مشترک، حداکثر وزن لبههای مشترک استفاده میشود.
مثال: اگر دو چندضلعی یک لبه مشترک داشته باشند و ویژگی Primitive استفاده شود، حداکثر Crease Weight برای لبه مشترک اعمال میشود.
بستن ترکها (Closing Cracks)
ترکها میتوانند با Pull Cracks Closed یا Stitch Cracks Together بسته شوند؛ بنابراین تنها یکی از این دو گزینه میتواند در هر زمان انتخاب شود.
-
Bias تنها برای Pull کاربرد دارد و هنگام انتخاب Stitch غیرفعال میشود.
یک ترک با یک لبه در ناحیه غیر تقسیمشده و چندین لبه در ناحیه تقسیمشده تشکیل میشود.
منوی Surrounding Faces مشخص میکند که لبه منفرد روی ناحیه غیر تقسیمشده و به طور کلی چندضلعی شامل آن لبه چگونه پردازش شود.
-
اگر No Edge Division انتخاب شود و ترکها با Pull بسته شوند:
تمام نقاط لبههای تقسیمشده به نزدیکترین نقاط لبه غیر تقسیمشده کشیده میشوند.
Bias در این حالت غیرفعال است. -
اگر ترکها با Divide Edges کشیده شوند:
لبه غیر تقسیمشده به بخشهای متعدد تقسیم میشود، به طوری که هر نقطه روی لبه غیر تقسیمشده با نقطه جدید روی لبه تقسیمشده متناظر شود.
سپس نقاط لبه تقسیمشده جدید با نقاط لبه تقسیمشده هممرز ترکیب میشوند.-
Bias = 1 → نقاط در طول لبه تقسیمشده قرار میگیرند
-
Bias = 0 → نقاط در طول لبه غیر تقسیمشده قرار میگیرند
-
مقادیر بین 0 و 1 → نقاط در جایی بین دو لبه قرار میگیرند
-
-
گزینه Triangulate همان Divide Edges را انجام میدهد، با این تفاوت که چندضلعی غیر تقسیمشده را نیز به مثلث تقسیم میکند.
این ضروری است چون کشیدن لبه غیر تقسیمشده به سمت لبه منحنی ممکن است چندضلعی غیرمسطح ایجاد کند.
Bias = 1 و Triangulate → معمولاً بهترین نتیجه را میدهد. -
گزینه Stitch Cracks Together چندضلعیهای جدید (مثلثها) ایجاد میکند تا ترکها بسته شوند.
-
No Edge Division → مثلثهای زیادی با یک رأس روی لبه غیر تقسیمشده ایجاد میشود
-
Divide Boundary Edges → لبه غیر تقسیمشده تقسیم میشود و مثلثهای منظمتر ایجاد میشوند
-
Triangulate → برای تقسیم چندضلعی غیر تقسیمشده استفاده میشود، اما در این حالت کمتر نیاز است
-
پارامترها – صفحه Page
Group (subdivide)
زیرمجموعهای از ورودی که به عنوان Mesh چندضلعی برای Subdivide استفاده میشود.
الگوها پذیرفته میشوند (Pattern Matching).
Creases (creases)
مشخص کردن زیرمجموعهای از ورودی دوم برای استفاده به عنوان Crease.
-
هر لبه در پرایمیتیو Crease → لبه متناظر در Mesh چندضلعی با همان شماره نقاط
-
موقعیت نقاط مهم نیست
-
ویژگی Primitive creasesharpness برای تعیین تیزی Creaseها استفاده میشود مگر Override فعال باشد
Depth (iterations)
تعداد دفعات تقسیمبندی.
-
عدد بیشتر → سطح صافتر
Override Crease Weight Attribute (overridecrease)
تعیین میکند که تیزی Crease بر اساس ویژگی Primitive یا Vertex باشد یا با این SOP Override شود.
Crease Weight (creaseweight)
وزن استفاده شده در صورت Override.
-
نکته: پیشفرض، Override فعال است → مقدار مشخصشده برای تمام Creaseها اعمال میشود
-
امکان استفاده از SOP Vertex یا Primitive برای کنترل دقیقتر
Generate Resulting Creases (outputcrease)
اگر Creaseها تیزتر از Depth باشند، باقی میمانند.
-
با فعال بودن این پارامتر → Creaseهای باقیمانده ایجاد شده و با Attribute مناسب در گروه مشخص قرار میگیرند
New Group (outcreasegroup)
نام گروه برای قرار دادن Creaseهای تولیدشده
Close Cracks (closeholes)
انتخاب نحوه مدیریت شکافها در هندسه خروجی
Surrounding Faces (surroundpoly)
انتخاب نحوه مدیریت چندضلعیهای اطراف ترک هنگام Pull یا Stitch
Bias (bias)
تعیین اینکه کدام نقاط هنگام Pull ترک بسته شوند:
-
0 → نقاط ناحیه تقسیمشده به لبه غیر تقسیمشده کشیده میشوند
-
1 → نقاط لبه غیر تقسیمشده به ناحیه تقسیمشده کشیده میشوند
مثال
در مثال زیر، یک Subdivide SOP برای ایجاد سطح تقسیمشده از Box SOP استفاده شده است.
-
Depth = 2
-
Facet SOP نقاط را Consolidate میکند تا وجوه جعبه به عنوان یک واحد در نظر گرفته شوند
SubdivisionSOPeg.gif
ورودیهای اپراتور
-
Input 0: –
-
Input 1: –
کانالهای Info CHOP
اطلاعات اضافی Subdivide SOP از طریق Info CHOP قابل دسترسی است.
Common SOP Info Channels
-
num_points → تعداد نقاط در SOP
-
num_prims → تعداد پرایمیتیوها در SOP
-
num_particles → تعداد ذرات در SOP
-
last_vbo_update_time → زمان صرف شده در Thread دیگر برای بهروزرسانی دادههای هندسه روی GPU از دادههای CPU
-
last_meta_vbo_update_time → زمان صرف شده در Thread دیگر برای بهروزرسانی Meta Surface (مانند Metaballs یا NURBS) روی GPU
Common Operator Info Channels
-
total_cooks → تعداد دفعات Cook اپراتور
-
cook_time → مدت زمان آخرین Cook (میلیثانیه)
-
cook_frame → شماره فریم آخرین Cook نسبت به Timeline Component
-
cook_abs_frame → شماره فریم آخرین Cook نسبت به زمان مطلق
-
cook_start_time → زمان شروع Cook (میلیثانیه)
-
cook_end_time → زمان پایان Cook (میلیثانیه)
-
cooked_this_frame → 1 اگر اپراتور در این فریم Cook شده باشد
-
warnings → تعداد هشدارها
-
errors → تعداد خطاها
