هوش مصنوعی در Rhino و Grasshopper؛ آموزش طراحی پارامتریک، تولید مدل سهبعدی و اتصال به AI
در این آموزش یاد میگیرید چگونه Rhino 8 و Grasshopper را به API هوش مصنوعی درواره متصل کنید، توضیح متنی را به پارامترهای کنترلشده تبدیل کنید و مدل مفهومی سهبعدی بسازید.
ترکیب Rhino، Grasshopper و هوش مصنوعی میتواند شیوه طراحی فرمهای سهبعدی و سیستمهای پارامتریک را تغییر دهد. بهجای اینکه کاربر تمام ورودیهای یک Definition را بهصورت دستی تنظیم کند، میتوان توضیح متنی پروژه را به پارامترهای کنترلشده تبدیل کرد، چند گزینه طراحی ساخت، محدودیتها را بررسی کرد و هندسههای مفهومی را در Grasshopper تولید کرد.
برای مثال، کاربر میتواند بنویسد:
یک برج مفهومی ۲۴ طبقه با پلان ششضلعی، فرم باریکشونده و چرخش ملایم طراحی کن.
مدل زبانی این توضیح را به دادهای ساختاریافته مانند تعداد طبقات، ارتفاع طبقه، شعاع پایه، شعاع رأس، تعداد اضلاع و میزان چرخش تبدیل میکند. Grasshopper سپس براساس این پارامترها هندسه را میسازد.
مزیت اصلی این روش آن است که هوش مصنوعی مستقیماً و بدون محدودیت هندسه دلخواه تولید نمیکند. مدل فقط پارامترهایی را پیشنهاد میدهد که در محدوده از پیش تعریفشده قرار دارند و Grasshopper مسئول ساخت هندسه معتبر است.
در این مقاله یاد میگیرید:
- Rhino و Grasshopper چه تفاوتی دارند
- هوش مصنوعی در کدام مراحل طراحی پارامتریک کاربرد دارد
- چه قابلیتهایی در Rhino 8 برای توسعه ابزارهای هوشمند وجود دارد
- چگونه Python 3 را در Grasshopper اجرا کنید
- چگونه Grasshopper را به API درواره متصل کنید
- چگونه متن فارسی را به پارامترهای JSON تبدیل کنید
- چگونه از پارامترها یک فرم سهبعدی مفهومی بسازید
- چگونه مقادیر تولیدشده را محدود و اعتبارسنجی کنید
- چرا نباید کد تولیدشده توسط مدل را خودکار اجرا کرد
- چگونه یک دستیار طراحی پارامتریک واقعی بسازید
Rhino چیست؟
Rhinoceros یا Rhino یک نرمافزار مدلسازی سهبعدی است که بیشتر برای طراحی صنعتی، معماری، جواهرات، ساخت دیجیتال، طراحی محصول، کشتیسازی و فرمهای پیچیده استفاده میشود.
Rhino بهخصوص در مدلسازی NURBS قدرتمند است و امکان کار با انواع مختلف هندسه را فراهم میکند:
- Curve
- Surface
- Polysurface
- Mesh
- SubD
- Point Cloud
- Solid
- Annotation
- Block
Rhino 8 قابلیتهایی مانند ShrinkWrap، PushPull، SubD Creases، ابزارهای بهتر ترسیم، موتور رندر سریعتر و محیط جدید Script Editor را ارائه کرده است. فهرست امکانات در صفحه رسمی قابلیتهای Rhino 8 موجود است.
Grasshopper چیست؟
Grasshopper یک محیط Visual Programming است که داخل Rhino اجرا میشود. کاربر بهجای نوشتن برنامه خطبهخط، Componentها را روی Canvas قرار میدهد و با اتصال ورودی و خروجی آنها یک سیستم پارامتریک میسازد.
برای مثال میتوان:
- تعداد طبقات ساختمان را با Slider کنترل کرد
- نمای پارامتریک ساخت
- الگوی پنلبندی تولید کرد
- مسیر حرکت خورشید را تحلیل کرد
- سطح را به قطعات قابلساخت تقسیم کرد
- فرم سازه را براساس نیرو تغییر داد
- صدها گزینه طراحی تولید کرد
- دادهها را از فایل یا API دریافت کرد
- هندسه را به Revit منتقل کرد
براساس معرفی رسمی Rhino، Grasshopper بهصورت مستقیم با ابزارهای مدلسازی Rhino یکپارچه است و برای ساخت فرمهای مولد الزاماً به دانش برنامهنویسی نیاز ندارد.
آیا Rhino و Grasshopper هوش مصنوعی داخلی دارند؟
Rhino 8 یک چتبات عمومی یا ابزار داخلی Text-to-3D ندارد که با نوشتن یک جمله، پروژه کامل معماری تولید کند.
زیرساخت اصلی Rhino برای ساخت ابزارهای هوشمند شامل موارد زیر است:
- Script Editor
- Python 3
- C#
- RhinoCommon
- Grasshopper Script Component
- Package Manager
- Rhino.Compute
- Rhino.Inside
- Plugin SDK
بنابراین هوش مصنوعی معمولاً از طریق اسکریپت، افزونه، API یا سرویس بیرونی به Rhino و Grasshopper متصل میشود.
| قابلیت | داخل Rhino یا Grasshopper | نیازمند مدل بیرونی |
|---|---|---|
| مدلسازی NURBS | بله | خیر |
| طراحی پارامتریک | بله | خیر |
| اجرای Python 3 | بله | خیر |
| تولید متن و تحلیل Brief | خیر | بله |
| تبدیل زبان طبیعی به JSON | خیر | بله |
| تحلیل تصویر مرجع | خیر | بله |
| تولید تکسچر یا کانسپت | خیر | بله |
| ساخت هندسه از پارامتر | بله | خیر |
| رندر هوشمند | با موتورهای مکمل | معمولاً بله |
| ساخت دستیار اختصاصی | زیرساخت آن موجود است | بله |
بهترین کاربردهای هوش مصنوعی در Rhino و Grasshopper
تبدیل Brief به پارامتر
هوش مصنوعی میتواند توضیح کارفرما را به مقادیری تبدیل کند که Grasshopper قادر به استفاده از آنها باشد.
تولید چند گزینه طراحی
یک مدل زبانی میتواند چند ترکیب پارامتری پیشنهاد دهد و Grasshopper هندسه تمام گزینهها را ایجاد کند.
توضیح Definition
Definitionهای بزرگ Grasshopper ممکن است پیچیده شوند. مدل زبانی میتواند نام Componentها، ورودیها و منطق کلی آنها را مستند کند.
تولید نسخه اولیه Python یا C#
هوش مصنوعی میتواند نقطه شروع یک Script Component را تولید کند، اما کد باید توسط توسعهدهنده بررسی شود.
تحلیل خطا
متن خطا، ورودیها و بخش مرتبط اسکریپت را میتوان برای توضیح و پیشنهاد اصلاح به مدل زبانی داد.
پیشنهاد ساختار الگوریتم
برای مثال، مدل میتواند پیشنهاد دهد که یک مسئله پنلبندی با چه مراحل محاسباتی حل شود.
ساخت پرامپت رندر
مدل میتواند مشخصات فرم، متریال و محیط را به پرامپت تولید تصویر تبدیل کند.
پردازش داده
دادههای متنی، جداول و توضیحات پروژه میتوانند پیش از ورود به Grasshopper پاکسازی و ساختاریافته شوند.
معماری مناسب اتصال هوش مصنوعی به Grasshopper
بهترین معماری این نیست که مدل هوش مصنوعی کد دلخواه تولید کند و Grasshopper همان کد را اجرا کند.
جریان کاری امنتر:
- کاربر توضیح پروژه را وارد میکند.
- Grasshopper متن را به API میفرستد.
- مدل فقط JSON با فیلدهای از پیش تعریفشده برمیگرداند.
- اسکریپت پاسخ را Parse میکند.
- مقادیر اعتبارسنجی میشوند.
- مقادیر خارج از محدوده محدود یا رد میشوند.
- Grasshopper با الگوریتم از پیش نوشتهشده هندسه را میسازد.
- کاربر نتیجه را بررسی میکند.
این روش قابلیت پیشبینی و کنترل بسیار بیشتری دارد.
قابلیتهای برنامهنویسی Rhino 8
Rhino 8 یک Script Editor جدید دارد که از Python و C# پشتیبانی میکند. براساس صفحه رسمی ویژگیهای Rhino، محیط اسکریپتنویسی Rhino 8 از RhinoCommon و CPython در Rhino و Grasshopper روی Windows و macOS پشتیبانی میکند.
برای بازکردن Script Editor در Rhino، این دستور را وارد کنید:
ScriptEditor
در نخستین اجرا، آمادهسازی محیط Python 3 ممکن است کمی زمان ببرد. مستندات رسمی نیز توضیح میدهند که Script Editor هنگام اولین اجرا محیط CPython را مقداردهی میکند. جزئیات در راهنمای Script Editor راینو موجود است.
Python 3 در Grasshopper
برای افزودن Python 3 Script Component:
- Rhino 8 را اجرا کنید.
- دستور
Grasshopperرا وارد کنید. - در Grasshopper وارد تب
Mathsشوید. - بخش
Scriptرا باز کنید. - یک Script Component روی Canvas قرار دهید.
- زبان Component را روی Python 3 تنظیم کنید.
در نسخههای جدید میتوانید از Script Component عمومی یا Python 3 Script Component استفاده کنید. راهنمای رسمی آن در مستندات Python در Grasshopper ارائه شده است.
آزمایش ساده Python در Grasshopper
ابتدا یک Component ساده بسازید.
ورودیها:
x
y
خروجی:
result
کد:
result = x + y
دو Number Slider را به ورودیها متصل کنید. اگر جمع آنها در خروجی نمایش داده شد، محیط Python آماده است.
دسترسی به Rhino.Geometry
برای ساخت هندسه از کتابخانه Rhino.Geometry استفاده میکنیم:
import Rhino.Geometry as rg
point = rg.Point3d(0, 0, 0)
circle = rg.Circle(point, 10)
curve = circle.ToNurbsCurve()
RhinoCommon مجموعهای از کلاسهای هندسی مانند Point، Vector، Curve، Surface، Mesh، Brep و Transform را در اختیار توسعهدهنده قرار میدهد.
اتصال Grasshopper به API درواره
درواره یک API هوش مصنوعی سازگار با ساختار OpenAI ارائه میدهد. میتوان از Python 3 داخل Rhino یا Grasshopper برای ارسال درخواست استفاده کرد.
آدرس پایه:
https://api.darvareh.ir/v1
Endpoint مورد استفاده:
https://api.darvareh.ir/v1/chat/completions
مقادیر نمونه:
YOUR_DARVAREH_API_KEY
YOUR_MODEL_ID
برای مشاهده مدلهای موجود، قابلیتها و قیمت بهروز به صفحه مدلهای درواره مراجعه کنید.
پروژه عملی: تبدیل متن فارسی به برج پارامتریک
در این پروژه، کاربر یک توضیح فارسی مینویسد. مدل هوش مصنوعی فقط این پارامترها را برمیگرداند:
- تعداد طبقات
- ارتفاع هر طبقه
- شعاع پایین
- شعاع بالا
- میزان چرخش
- تعداد اضلاع پلان
Grasshopper سپس پلان طبقات را میسازد.
این تمرین یک مدل اجرایی یا سازهای تولید نمیکند. هدف آن نمایش یک Workflow کنترلشده برای Concept Design است.
ساخت ورودیهای Component
یک Python 3 Script Component روی Canvas قرار دهید و ورودیها را به این نامها تغییر دهید:
Prompt
Run
ApiKey
ModelId
نوع دسترسی ورودیها را روی Item قرار دهید.
Componentهای لازم:
- Panel برای Prompt
- Button برای Run
- Panel برای ApiKey
- Panel برای ModelId
خروجیها را به این نامها تغییر دهید:
Geometry
Parameters
Status
کد کامل Grasshopper
import json
import math
import urllib.request
import urllib.error
import Rhino.Geometry as rg
Geometry = []
Parameters = ""
Status = "Ready"
def clamp(value, minimum, maximum):
return max(minimum, min(value, maximum))
def remove_code_fence(text):
cleaned = text.strip()
if cleaned.startswith("```json"):
cleaned = cleaned[7:]
elif cleaned.startswith("```"):
cleaned = cleaned[3:]
if cleaned.endswith("```"):
cleaned = cleaned[:-3]
return cleaned.strip()
def request_parameters(prompt, api_key, model_id):
endpoint = "https://api.darvareh.ir/v1/chat/completions"
system_prompt = """
You convert Persian architectural concept descriptions into controlled JSON.
Return exactly one JSON object and no additional text.
Schema:
{
"floors": integer,
"floor_height": number,
"base_radius": number,
"top_radius": number,
"twist_degrees": number,
"sides": integer,
"summary_fa": string
}
Allowed ranges:
- floors: 3 to 80
- floor_height: 2.5 to 6.0 meters
- base_radius: 3 to 50 meters
- top_radius: 3 to 50 meters
- twist_degrees: -360 to 360 degrees
- sides: 3 to 12
Interpret the request conservatively.
Do not add fields.
Do not return Python code.
Do not return Markdown.
This output is only for conceptual geometry, not structural design.
"""
payload = {
"model": model_id,
"messages": [
{
"role": "system",
"content": system_prompt
},
{
"role": "user",
"content": prompt
}
],
"temperature": 0.2
}
request = urllib.request.Request(
endpoint,
data=json.dumps(payload).encode("utf-8"),
headers={
"Authorization": "Bearer " + api_key,
"Content-Type": "application/json"
},
method="POST"
)
with urllib.request.urlopen(request, timeout=60) as response:
response_data = json.loads(
response.read().decode("utf-8")
)
content = response_data["choices"][0]["message"]["content"]
clean_content = remove_code_fence(content)
return json.loads(clean_content)
def validate_parameters(data):
validated = {
"floors": int(clamp(
int(data.get("floors", 12)),
3,
80
)),
"floor_height": float(clamp(
float(data.get("floor_height", 3.3)),
2.5,
6.0
)),
"base_radius": float(clamp(
float(data.get("base_radius", 10)),
3,
50
)),
"top_radius": float(clamp(
float(data.get("top_radius", 8)),
3,
50
)),
"twist_degrees": float(clamp(
float(data.get("twist_degrees", 0)),
-360,
360
)),
"sides": int(clamp(
int(data.get("sides", 6)),
3,
12
)),
"summary_fa": str(
data.get("summary_fa", "فرم مفهومی پارامتریک")
)
}
return validated
def create_floor_polygon(z, radius, rotation_degrees, sides):
points = []
rotation_radians = math.radians(rotation_degrees)
for index in range(sides):
angle = (
(2.0 * math.pi * index / sides)
+ rotation_radians
)
x = radius * math.cos(angle)
y = radius * math.sin(angle)
points.append(rg.Point3d(x, y, z))
points.append(points[0])
polyline = rg.Polyline(points)
return rg.PolylineCurve(polyline)
def create_tower(data):
curves = []
floors = data["floors"]
floor_height = data["floor_height"]
base_radius = data["base_radius"]
top_radius = data["top_radius"]
twist_degrees = data["twist_degrees"]
sides = data["sides"]
denominator = max(floors - 1, 1)
for floor_index in range(floors):
factor = floor_index / float(denominator)
z = floor_index * floor_height
radius = (
base_radius
+ (top_radius - base_radius) * factor
)
rotation = twist_degrees * factor
floor_curve = create_floor_polygon(
z,
radius,
rotation,
sides
)
curves.append(floor_curve)
return curves
if Run:
if not Prompt:
Status = "Prompt is empty."
elif not ApiKey:
Status = "API key is missing."
elif not ModelId:
Status = "Model ID is missing."
else:
try:
raw_parameters = request_parameters(
Prompt,
ApiKey,
ModelId
)
valid_parameters = validate_parameters(
raw_parameters
)
Geometry = create_tower(valid_parameters)
Parameters = json.dumps(
valid_parameters,
ensure_ascii=False,
indent=2
)
Status = "Conceptual geometry generated successfully."
except urllib.error.HTTPError as error:
details = error.read().decode(
"utf-8",
errors="replace"
)
Status = (
"HTTP Error "
+ str(error.code)
+ ": "
+ details
)
except urllib.error.URLError as error:
Status = "Connection Error: " + str(error.reason)
except json.JSONDecodeError as error:
Status = "Invalid JSON response: " + str(error)
except Exception as error:
Status = "Unexpected Error: " + str(error)
اجرای پروژه
در Panel مربوط به Prompt بنویسید:
یک برج مفهومی ۲۴ طبقه با پلان ششضلعی طراحی کن.
فرم از پایین به بالا کمی باریک شود و در مجموع ۹۰ درجه بچرخد.
ارتفاع طبقات برای یک ساختمان اداری معمولی مناسب باشد.
در Panel مربوط به ApiKey:
YOUR_DARVAREH_API_KEY
در Panel مربوط به ModelId:
YOUR_MODEL_ID
سپس Button را فشار دهید.
خروجی Geometry شامل مجموعهای از منحنیهای بسته خواهد بود که پلان طبقات را نمایش میدهند.
خروجی Parameters ممکن است مشابه این باشد:
{
"floors": 24,
"floor_height": 3.6,
"base_radius": 14.0,
"top_radius": 10.5,
"twist_degrees": 90.0,
"sides": 6,
"summary_fa": "برج اداری مفهومی با پلان ششضلعی، باریکشوندگی ملایم و چرخش تدریجی"
}
چرا از JSON استفاده کردیم؟
اگر مدل یک متن آزاد برگرداند، Grasshopper نمیتواند با اطمینان آن را به پارامتر تبدیل کند.
JSON مزایای مهمی دارد:
- فیلدها مشخصاند
- Parse کردن ساده است
- نوع داده قابلبررسی است
- میتوان محدوده عددی تعیین کرد
- خطا قابلشناسایی است
- داده برای Componentهای دیگر قابلاستفاده است
این معماری نمونهای از Structured Output است، حتی اگر اعتبارسنجی نهایی در کد انجام شود.
اهمیت اعتبارسنجی پارامترها
نباید فرض کنیم مدل همیشه محدودیتها را رعایت میکند. در کد، تمام مقادیر Clamp شدهاند.
برای مثال:
floors = clamp(floors, 3, 80)
اگر مدل تعداد طبقات را 500 برگرداند، اسکریپت آن را به 80 محدود میکند.
محدودیتها باید براساس پروژه واقعی تعیین شوند. برای مثال در یک سیستم طراحی مبلمان ممکن است محدودهها به میلیمتر تعریف شوند.
تبدیل منحنی طبقات به حجم
خروجی تمرین شامل منحنی پلان است. برای ساخت فرم اولیه میتوانید از Componentهای Grasshopper استفاده کنید:
- خروجی Geometry را به Loft متصل کنید.
- گزینه Closed Loft را بررسی کنید.
- از Cap Holes برای بستن ابتدا و انتهای حجم استفاده کنید.
- حجم را با Brep Join بررسی کنید.
- در صورت نیاز سطح را پنلبندی کنید.
ترتیب ساده:
Python Geometry → Loft → Cap Holes → Brep
برای ساخت Floor Slab:
Curves → Boundary Surfaces → Extrude
برای هر طبقه میتوان مقدار Extrude کوچکی مانند ضخامت مفهومی دال در نظر گرفت.
ساخت چند گزینه طراحی
بهجای یک خروجی میتوانید از مدل بخواهید سه گزینه JSON بسازد:
{
"options": [
{
"name": "گزینه A",
"floors": 18,
"floor_height": 3.4,
"base_radius": 13,
"top_radius": 11,
"twist_degrees": 30,
"sides": 6
},
{
"name": "گزینه B",
"floors": 24,
"floor_height": 3.6,
"base_radius": 14,
"top_radius": 9,
"twist_degrees": 90,
"sides": 8
}
]
}
سپس برای هر گزینه یک Data Branch جداگانه بسازید.
در نسخه حرفهای میتوان گزینهها را براساس این معیارها مقایسه کرد:
- زیربنا
- نسبت سطح به حجم
- ارتفاع
- تعداد پنل
- میزان پیچش
- سطح پوسته
- سایهاندازی
- مصرف تقریبی متریال
- پیچیدگی ساخت
مدل زبانی نباید محاسبات هندسی دقیق را حدس بزند. مقادیر باید توسط Grasshopper محاسبه شوند.
نقش صحیح مدل زبانی و Grasshopper
| وظیفه | مدل زبانی | Grasshopper |
|---|---|---|
| فهم توضیح فارسی | مناسب | محدود |
| پیشنهاد پارامتر | مناسب | براساس ورودی |
| محاسبه هندسه دقیق | نامناسب بهتنهایی | بسیار مناسب |
| کنترل محدوده | قابلپیشنهاد | باید اجرا کند |
| ساخت NURBS | غیرمستقیم | مناسب |
| محاسبه مساحت | نباید حدس بزند | دقیق |
| تحلیل گزینهها | مناسب با داده واقعی | تولید داده |
| تصمیم اجرایی | خیر | خیر، نیازمند متخصص |
هوش مصنوعی باید زبان طبیعی را به داده تبدیل کند و Grasshopper باید هندسه و محاسبات دقیق را انجام دهد.
اتصال Brief معماری به Definition موجود
فرض کنید یک Definition برای نمای پارامتریک دارید که این ورودیها را میگیرد:
- تعداد طبقات
- عرض پنل
- عمق سایهبان
- درصد پنل باز
- میزان چرخش پنل
- تراکم الگو
میتوانید Schema را چنین تعریف کنید:
{
"floor_count": 12,
"panel_width": 1.2,
"shade_depth": 0.45,
"open_ratio": 0.35,
"panel_rotation": 18,
"pattern_density": 0.6
}
کاربر مینویسد:
نمایی با سایهاندازی متوسط میخواهم که بیش از حد بسته نباشد.
پنلها کمی چرخش داشته باشند و الگو در طبقات بالا سبکتر شود.
مدل این توضیح را به پارامتر تبدیل میکند، اما محدودهها همچنان در Definition کنترل میشوند.
استفاده از هوش مصنوعی برای نوشتن Grasshopper Script
پرامپت ضعیف:
برای من کد Grasshopper بنویس.
پرامپت مناسب:
برای Python 3 Script Component در Rhino 8 کد بنویس.
ورودیها:
- curves: List Access از Curve
- distance: Item Access از float
خروجی:
- offset_curves
شرایط:
- از Rhino.Geometry استفاده شود
- Curveهای Null نادیده گرفته شوند
- distance باید بین 0.01 و 100 محدود شود
- اگر Offset شکست خورد، خطا برای همان Curve گزارش شود
- هیچ فایل یا Command خارجی اجرا نشود
- هندسه ورودی تغییر نکند
- کد را خطبهخط توضیح بده
هرچه ورودی، خروجی، نوع داده و محدودیت مشخصتر باشد، احتمال دریافت کد قابلاستفاده بیشتر است.
چرا اجرای خودکار کد تولیدشده خطرناک است؟
کدی که مدل تولید میکند ممکن است:
- فایل را حذف یا بازنویسی کند
- Definition را قفل کند
- حلقه بسیار سنگین بسازد
- حافظه را پر کند
- Rhino را متوقف کند
- هندسه اصلی را تغییر دهد
- داده را به سرویس بیرونی ارسال کند
- Package نامطمئن نصب کند
روش مناسب:
- کد فقط بهصورت متن دریافت شود.
- کاربر آن را بررسی کند.
- کد روی فایل آزمایشی اجرا شود.
- تعداد Iteration محدود باشد.
- Timeout در درخواست شبکه وجود داشته باشد.
- دسترسی فایل و سیستم محدود شود.
- نسخه پشتیبان از پروژه نگهداری شود.
جلوگیری از اجرای تکراری API در Grasshopper
Grasshopper با هر تغییر ورودی دوباره Solution را اجرا میکند. اگر درخواست API مستقیماً به Slider متصل باشد، ممکن است با هر حرکت Slider چند درخواست ارسال شود.
راهحل:
- از Button استفاده کنید
- درخواست را فقط وقتی
Run=Trueاست اجرا کنید - نتیجه را Cache کنید
- از Data Dam استفاده کنید
- تغییرات Slider را از تماس API جدا کنید
- نتیجه JSON را در Panel یا فایل پروژه ذخیره کنید
در تمرین ما Button باعث میشود تماس API فقط با اقدام کاربر انجام شود.
نگهداری امن کلید API
قرار دادن کلید در Panel برای آزمایش ساده است، اما برای پروژه واقعی مناسب نیست؛ زیرا ممکن است کلید همراه فایل Grasshopper منتشر شود.
روش مناسبتر استفاده از Environment Variable است.
در Windows PowerShell:
setx DARVAREH_API_KEY "YOUR_DARVAREH_API_KEY"
سپس Rhino را دوباره اجرا کنید.
در Python:
import os
api_key = os.getenv("DARVAREH_API_KEY")
if not api_key:
raise RuntimeError(
"DARVAREH_API_KEY is not configured."
)
مزایا:
- کلید داخل فایل
.ghقرار نمیگیرد - اشتراک Definition امنتر است
- تغییر کلید سادهتر میشود
- یک کد در چند سیستم قابلاستفاده است
ساخت دستیار طراحی پارامتریک
نسخه پیشرفتهتر ابزار میتواند این بخشها را داشته باشد:
- ورودی Brief فارسی
- انتخاب نوع پروژه
- انتخاب Schema
- تعیین محدودیت پارامترها
- ساخت چند گزینه
- نمایش JSON
- تأیید کاربر
- تولید هندسه
- محاسبه شاخصها
- مقایسه گزینهها
- ذخیره گزینه منتخب
Workflow:
Brief → AI → JSON → Validation → Grasshopper → Geometry → Metrics → Review
استفاده از مدل بینایی برای تحلیل فرم
میتوانید Screenshot یا Render فرم را به یک مدل دارای ورودی تصویر بدهید.
پرامپت:
این تصویر یک فرم مفهومی تولیدشده در Rhino و Grasshopper است.
آن را از نظر موارد زیر تحلیل کن:
1. خوانایی فرم
2. نسبت پایه به ارتفاع
3. میزان باریکشوندگی
4. شدت چرخش
5. ریتم طبقات
6. پیچیدگی ساخت
7. کیفیت Silhouette
8. تکرارپذیری پنلها
9. نقاط دارای اعوجاج
10. پیشنهاد سه اصلاح پارامتریک
برای هر پیشنهاد دقیقاً مشخص کن کدام پارامتر باید افزایش یا کاهش پیدا کند.
درباره پایداری سازهای ادعای قطعی نکن.
مدل میتواند پیشنهاد دهد که Twist کمتر یا Taper بیشتر شود، اما بررسی سازهای به تحلیل تخصصی نیاز دارد.
استفاده از Rhino.Inside
Rhino.Inside اجازه میدهد Rhino و Grasshopper داخل بعضی نرمافزارهای 64 بیتی Windows اجرا شوند. یکی از شناختهشدهترین نمونهها Rhino.Inside.Revit است.
براساس معرفی رسمی Rhino.Inside، میتوان:
- Rhino و Grasshopper را داخل نرمافزار میزبان اجرا کرد
- از API نرمافزار میزبان استفاده کرد
- آبجکتهای Native ایجاد کرد
- داده را میان Grasshopper و میزبان منتقل کرد
یک Workflow هوشمند میتواند چنین باشد:
Brief → مدل زبانی → پارامترها → Grasshopper → هندسه → Rhino.Inside → Revit
در این جریان، انتقال به BIM باید با کنترل Category، Level، Type و مشخصات فنی انجام شود.
تولید افزونه از Script
Script Editor راینو میتواند Script را به Command یا Plugin تبدیل کند. براساس مستندات ساخت Script Plugin، امکان انتشار Script بهصورت:
- Rhino Command
- فایل
.rhp - Grasshopper Component
- فایل
.gha - Yak Package
وجود دارد.
پس از آزمایش Prototype میتوانید ابزار را به یک افزونه داخلی برای دفتر معماری تبدیل کنید.
نمونه کاربردهای واقعی
طراحی برج
متن پروژه به تعداد طبقات، Taper، Twist و شکل پلان تبدیل میشود.
طراحی نما
زبان طبیعی به اندازه پنل، چرخش، تراکم و عمق سایهبان تبدیل میشود.
طراحی غرفه
شرح مفهومی به شبکه، تعداد دهانه و ارتفاع نقاط کنترل تبدیل میشود.
طراحی محصول
توضیح ارگونومی به ابعاد پایه قابلآزمایش تبدیل میشود.
ساخت دیجیتال
مدل میتواند فرایند ساخت را توضیح دهد و Grasshopper قطعات، شمارهگذاری و نقشه برش را تولید کند.
مستندسازی Definition
مدل میتواند براساس فهرست Componentها، توضیحات استفاده و راهنمای ورودیها را آماده کند.
چکلیست پیش از استفاده حرفهای
API
- کلید در فایل ذخیره نشده است
- Timeout تعریف شده است
- خطاهای HTTP مدیریت میشوند
- تعداد درخواست کنترل میشود
- داده حساس ارسال نمیشود
پاسخ مدل
- خروجی JSON است
- فیلد اضافی رد میشود
- نوع داده بررسی میشود
- محدوده عددی کنترل میشود
- مقدار پیشفرض وجود دارد
Grasshopper
- Run با Button کنترل میشود
- حلقه بینهایت وجود ندارد
- تعداد هندسه محدود است
- Definition روی فایل آزمایشی تست شده است
- دادهها Cache میشوند
طراحی
- خروجی مفهومی معرفی شده است
- ابعاد واقعی بررسی میشوند
- مدل با نیاز پروژه تطبیق دارد
- محاسبات توسط Grasshopper انجام میشوند
- تصمیم نهایی توسط متخصص گرفته میشود
اشتباهات رایج
درخواست تولید پروژه کامل با یک جمله
مدل زبانی بدون Schema و محدودیت، خروجی قابلپیشبینی نمیدهد.
ارسال مستقیم پاسخ به Eval
هرگز متن یا کد مدل را مستقیماً با eval یا exec اجرا نکنید.
نبود Validation
حتی اگر محدودیتها در System Prompt نوشته شده باشند، کد باید دوباره آنها را کنترل کند.
اتصال API به Slider
این کار ممکن است دهها درخواست ناخواسته ایجاد کند.
اعتماد به محاسبات مدل
مساحت، حجم، طول و تعداد پنل باید توسط Rhino یا Grasshopper محاسبه شوند.
استفاده اجرایی از فرم مفهومی
فرم تولیدشده در تمرین نیازمند توسعه معماری، سازه، تأسیسات، ضوابط و جزئیات ساخت است.
قراردادن API Key در فایل عمومی
کلید را در Repository، فایل عمومی Grasshopper یا Screenshot منتشر نکنید.
پرسشهای متداول
آیا Rhino 8 هوش مصنوعی داخلی دارد؟
Rhino 8 زیرساخت قوی Python، C#، Script Editor و Plugin دارد، اما یک چتبات عمومی داخلی برای تولید مدل کامل از متن ارائه نمیکند.
آیا Grasshopper بدون برنامهنویسی قابلاستفاده است؟
بله. Grasshopper یک محیط Visual Programming است و بسیاری از Definitionها بدون کدنویسی ساخته میشوند. برای اتصال API، پردازش JSON و منطق سفارشی، Python مفید است.
آیا Rhino 8 از Python 3 پشتیبانی میکند؟
بله. Rhino 8 دارای محیط CPython و Script Component جدید برای Rhino و Grasshopper است.
آیا میتوان از فارسی برای کنترل Grasshopper استفاده کرد؟
بله. متن فارسی به مدل زبانی ارسال و به پارامترهای JSON تبدیل میشود. Grasshopper سپس از مقادیر عددی استفاده میکند.
آیا هوش مصنوعی مستقیماً فایل Rhino میسازد؟
در Workflow این مقاله، مدل فقط پارامتر تولید میکند و Rhino/Grasshopper هندسه را میسازند. این روش کنترلپذیرتر است.
آیا میتوان از مدل برای تولید GhPython استفاده کرد؟
بله، اما کد باید بازبینی و در فایل آزمایشی اجرا شود. اجرای خودکار کد تولیدشده توصیه نمیشود.
آیا میتوان چند گزینه طراحی تولید کرد؟
بله. Schema میتواند شامل آرایهای از گزینهها باشد و Grasshopper هر گزینه را در یک Data Branch جداگانه ایجاد کند.
آیا اتصال به API درواره نیازمند افزونه خاصی است؟
برای نمونه ساده خیر. Python 3 میتواند درخواست HTTP ارسال کند. برای محصول نهایی میتوان افزونه .gha یا .rhp ساخت.
چه مدلی برای Grasshopper مناسب است؟
برای تولید JSON و تحلیل Brief، یک مدل زبانی دقیق مناسب است. برای بررسی Render یا Screenshot باید مدل دارای ورودی تصویر انتخاب شود. فهرست مدلها در صفحه مدلهای درواره موجود است.
آیا خروجی این روش برای ساخت واقعی مناسب است؟
خروجی اولیه مفهومی است. استفاده اجرایی نیازمند کنترل معماری، سازه، مصالح، روش ساخت و ضوابط پروژه است.
جمعبندی
ترکیب Rhino 8، Grasshopper، Python 3 و API هوش مصنوعی یک جریان کاری قدرتمند برای طراحی پارامتریک ایجاد میکند. نکته کلیدی این است که وظایف بهدرستی تقسیم شوند:
- مدل زبانی توضیح طبیعی را درک میکند
- JSON اطلاعات را ساختاریافته میکند
- Validation محدودهها را کنترل میکند
- Grasshopper هندسه و محاسبات را انجام میدهد
- Rhino مدل را نمایش و ویرایش میکند
- طراح نتیجه را ارزیابی و تأیید میکند
روش مناسب این نیست که هوش مصنوعی کد نامحدود تولید و اجرا کند. معماری حرفهایتر آن است که مدل فقط داده محدود و قابلاعتبارسنجی تولید کند.
برای ساخت دستیار طراحی پارامتریک، مولد گزینه، تحلیلگر فرم یا ابزار هوشمند اختصاصی در Rhino و Grasshopper میتوانید از API درواره استفاده کنید. فهرست مدلها، قابلیتها و قیمت بهروز در صفحه مدلهای درواره ارائه میشود.
مقالات مرتبط
- هوش مصنوعی در معماری؛ آموزش طراحی ساختمان، پلان، نما و رندر
- هوش مصنوعی طراحی داخلی؛ بازطراحی اتاق و دکوراسیون
- طراحی حیاط، باغ و فضای سبز با هوش مصنوعی
- ساخت اپلیکیشن با هوش مصنوعی؛ راهنمای کامل
- آموزش کامل مهندسی پرامپت و پرامپتنویسی
- خروجی ساختاریافته با JSON Schema در API هوش مصنوعی
- راهنمای Function Calling در هوش مصنوعی
- API هوش مصنوعی چیست؟
برای مطالعه شرایط استفاده و محدودیتهای مسئولیت، صفحه «سلب مسئولیت» را مشاهده کنید.