OSL बनावट मानचित्रण [डुप्लिकेट]

Dec 04 2020

मैं OSL और ब्लेंडर के लिए नया हूँ। मैं एक विमान पर एक वृत्त बनाने के लिए निम्नलिखित कोड का उपयोग कर रहा हूँ। हालाँकि, विमान दो त्रिकोणों में विभाजित होता दिखाई देता है। क्या कोई समझा सकता है कि इसे कैसे ठीक किया जाए ताकि मेरा ओएसएल सर्कल सही ढंग से मैप हो जाए? धन्यवाद!

shader Circle(
        float rad=0.75 [[float min=0, float max=1]],
        float sharp=0.8 [[float min=0, float max=1]],
        int rep=1[[int min=1, int max=10]],
        point cent=point(0.5, 0.5, 0),
    output color c = 0)
{
    point pt = point(rep*u, rep*v,0);
    float ctx = floor(pt[0])+cent[0];
    float cty = floor(pt[1])+cent[1];
    point ct = point(ctx, cty, 0);
    float d = fmod(distance(ct, pt), rep)/rad;

    c = 1-smoothstep(0.5*sharp, 1-0.5*sharp, d);

}

जवाब

1 RobinBetts Dec 04 2020 at 16:44

uऔर vओएसएल द्वारा प्रदान किए गए वैश्विक चर हैं। वे पैरामीट्रिक यू और वी का उल्लेख करते हैं ; वर्तमान में छायांकित त्रिकोण में छायांकन बिंदु का सामान्यीकृत बेरेंट्रिक निर्देशांक । वे समान यू और वी हैं जैसे कि 2 डी वेक्टर में आपको जियोमेट्री नोड> पैरामीट्रिक आउटपुट से मिलते हैं ।

यू और ट्रैक्टर के वी पाने के लिए, के रूप में मैप किया गया है, तो आप वस्तु की सक्रिय यूवी नक्शे से यू और वी को देखने के लिए, का उपयोग कर getattribute():

shader Circle(
        float radius = 0.75,
        float sharpness = 0.8,
        int tiles = 1,
        point center = point(0.5, 0.5, 0.0),
        output color c = (0.0) 
        )
{
    vector UV = (0.0);
    int hasUV = getattribute( "geom:uv", UV);
  
    point pt = point(tiles*UV[0], tiles*UV[1],0);
    float ctx = floor(pt[0])+center[0];
    float cty = floor(pt[1])+center[1];
    point ct = point(ctx, cty, 0);
    float d = fmod(distance(ct, pt), tiles)/radius;

    c = 1-smoothstep(0.5*sharpness, 1-0.5*sharpness, d);
}

.. लेकिन यहाँ, हम ब्लेंडर मैनुअल में एक अधूरा वादा करते हैं, जो कि इस उत्तर की आयु को देखते हुए , आप अब तक तय कर सकते हैं। विचित्र रूप से, जहां तक ​​उपयोगकर्ता का संबंध है, ब्लेंडर के ओएसएल के कार्यान्वयन ने मूल्य देने से इनकार कर दिया geom:uv, जब तक कि पेड़ में कहीं एक छवि बनावट नोड न हो। (यदि आप अपने ओएसएल में नाम से कुछ अन्य यूवी मानचित्र का मूल्यांकन करना चाहते हैं, तो पेड़ में एक नाम यूवी नक्शा नोड भी होना चाहिए, जो छवि बनावट नोड से जुड़ा है ।)

तो आपका पेड़ इस तरह दिखता है:

मुझे आशा है कि यह उत्तर आपको कुछ समय बचाता है .. :)