ฉันจะสร้างพื้นผิวที่ดูเหมือนใบชาที่หลงเหลืออยู่ได้อย่างไร


11

เรากำลังทำงานในโครงการสำหรับ iPhone และ Windows Phone 7 ที่เราต้องการที่จะสามารถสร้างใบชาที่ด้านล่างของถ้วย ไม่จำเป็นต้องดูสมจริงเหมือนภาพถ่ายและจริงๆแล้วการ์ตูน -y นั้นใช้ได้

เราควรค้นคว้าเทคนิคแบบใดเพื่อให้บรรลุสิ่งนี้? มีห้องสมุดใดบ้าง (เด่นกว่าในภาษาซี แต่เราสามารถแปลได้) ซึ่งจะเป็นประโยชน์หรือไม่?

นี่คือตัวอย่างบางส่วนที่ดึงมาจากการค้นหาของ Google รูปภาพ

ป้อนคำอธิบายรูปภาพที่นี่ ป้อนคำอธิบายรูปภาพที่นี่


คุณสามารถระบุความต้องการของคุณได้มากขึ้นหรือไม่? พวกเขาจำเป็นต้องหมุนวนไปมาแตกต่างกันในแต่ละครั้งหรือไม่? เพราะถ้าไม่มีความต้องการด้านภาพเคลื่อนไหวหรือความเป็นเอกลักษณ์ฉันไม่เห็นว่าทำไมคุณไม่สามารถใช้รูปถ่าย / ภาพวาดเป็นพื้นผิวได้
phillipwei

@phillipwei ใช่พวกเขาจะต้องแตกต่างกันในแต่ละครั้งหรืออย่างน้อยก็พอแตกต่างกันพอสมควรว่ามันจะไม่รู้สึกเหมือนภาพถ่ายสต็อกหรืออะไรก็ตาม
Jedidja

คำตอบ:


15

ฉันจะทำอย่างไรเพื่อที่ฉันจะสามารถควบคุมงานศิลปะได้และไม่ใช้เวลานานในการพยายามปรับแต่งวิธีการเพื่อให้ถูกต้อง ...

ขั้นแรกให้สร้างกลุ่มสไปรต์ของใบชาด้วยตนเองเป็น "สระว่ายน้ำ" ศิลปะของคุณ - ไม่ใช่ใบชามูลค่าเท่าถ้วยทั้งหมด แต่จะเหมือนกับกลุ่มเล็ก ๆ บอกว่า 20 คนหรือมากกว่านั้น?

จากนั้นวางตัวเลขสุ่มของพวกเขาที่พิกัดสุ่มบนฐาน "ถ้วย" ให้แต่ละการหมุนและสเกลแบบสุ่มรวมกับการสุ่มแนวนอนและ / หรือการมิเรอร์แนวตั้ง สิ่งนี้ควรสร้างผลลัพธ์ที่ดี

วิธีการนี้จะให้อิสระทางศิลปะในการสร้างแต่ละกลุ่มให้มีลักษณะที่คุณต้องการในขณะที่ให้ผลลัพธ์ที่หลากหลาย (สมมติว่ามีสไปรต์ให้เลือก)

นอกจากนี้ด้วยวิธีนี้ (และวิธีการสุ่มใด ๆ รวมถึงเสียงรบกวนจาก Perlin) คุณสามารถสร้างโปรแกรมสร้างตัวเลขสุ่มที่จุดเริ่มต้นของกระบวนการด้วยเมล็ดที่รู้จักเพื่อสร้างผลลัพธ์ที่ทำซ้ำได้ หากคุณบันทึกเมล็ดคุณสามารถสร้างรูปแบบเดิมอีกครั้งโดยการป้อนซ้ำก่อนที่จะเริ่มต้นลำดับ คุณสามารถทำสิ่งที่สนุก ๆ เหมือนมีใครสักคนพิมพ์ชื่อของพวกเขาเปลี่ยนตัวอักษรให้เป็นตัวเลข (รวม ASCII และอื่น ๆ ) จากนั้นใช้มันเป็นเมล็ดพันธุ์ของ "ใบชารูปแบบนี้ที่เหมาะกับคุณ" สิ่ง.

นี่คือรหัสเทียมบางส่วนสำหรับสิ่งที่ฉันหมายถึงถ้ามันช่วย ...

var sprites = [...]; // Array of tea leaf sprites

var n_leaves = rand(5)+5; // Random number of leaves from 5-9
for (i=0; i<n_leaves; i++) {
    var sprite_index = rand(sprites.length);  // Random sprite index
    var r = rand(CUP_DIAMETER);          // Random radius for point on disk calc
    var theta = rand(2*PI);              // Random theta (rotation) for point on disk
    var sprite_x = sqrt(r) * cos(theta); // Sprite X
    var sprite_y = sqrt(r) * sin(theta); // Sprite Y
    var sprite_rotation = rand(2*PI);    // Sprite rotation
    var sprite_scale = rand(1) + 0.5;    // Sprite scale from 0.5 to 1.5
    var sprite_h_mirror = (rand(1) < 0.5 ? true : false); // If true, mirror horizontally
    var sprite_v_mirror = (rand(1) < 0.5 ? true : false);   // If true, mirror vertically
    draw_sprite(sprite_index, sprite_x, sprite_y, sprite_rotation, sprite_h_mirror, sprite_v_mirror);
}

ลองดูที่http://mathworld.wolfram.com/DiskPointPicking.htmlเพื่อการสนทนาที่ยอดเยี่ยมเกี่ยวกับวิธีเลือกจุดสุ่มในดิสก์และทำไมฉันถึงใช้สิ่งทั้ง sqrt / sin / cos


7

ลองใช้สัญญาณรบกวนเปอร์ลินด้วยค่า cutoff ไบนารีที่ 0.8 หรือมากกว่านั้นเหรอ?

ภาพตัวอย่างที่อัปโหลดไปยังhttp://imgur.com/a/Ydc4y ภาพแรกคือภาพที่สองโดยมีการใช้เกณฑ์ ประการที่สองคือเสียง Perlin พื้นฐานที่คุณสามารถหาอ้างอิงที่ดีหลายอย่างเช่นhttp://en.wikipedia.org/wiki/Perlin_noiseและhttp://http.developer.nvidia.com/GPUGems2/gpugems2_chapter26.html

คุณสามารถเล่นได้เล็กน้อยด้วยจำนวนและระดับของอ็อกเทฟในเสียงเพอร์ลินเพื่อแปรผันว่าผลลัพธ์ที่ออกมานั้นเรียบเนียนเพียงใดรวมถึงเกณฑ์ที่ใช้ในการกำหนดว่าจะมีใบชา (โดยเฉลี่ยเท่าใด


3
นี่อาจเป็นคำตอบที่ดีกว่าด้วยลิงก์และตัวอย่างของสิ่งที่สามารถผลิตได้
MichaelHouse

ความคิดที่ดีถึงแม้ว่าจะสามารถใช้ภาพนิ่งได้และพื้นที่วงกลมสามารถถูกบีบอัดในพิกเซล shader และขอบของวงกลมนั้นก็ขนออกมาโดยไม่จำเป็นต้องสร้างค่าสัญญาณรบกวน Perlin ต่อพิกเซล (จากประสบการณ์ของฉันวิธีนี้ค่อนข้างช้า )
Teodron

การสร้างเสียงเพอร์ลินนั้นค่อนข้างหนัก คุณสามารถใช้เอฟเฟกต์เสียงรบกวนที่กำหนดไว้ล่วงหน้าสำหรับเอฟเฟกต์นี้ (และอื่น ๆ อีกมากมาย) คุณยังสามารถใช้วิธีการคำนวณล่วงหน้าได้อีกด้วย
dascandy

4
-1 เมื่อมองดูใบชาจำนวนมากและเสียงเพอร์ลินมากมาย (1 / f) ฉันไม่สามารถพูดได้เลยว่าพวกเขามองเหมือนกันทั้งหมด เสียงรบกวนของเพอร์ลินอาจเป็นจุดเริ่มต้นที่ถูกต้อง แต่เป้าหมายไม่เหมาะสำหรับตัวแปรรวม (1 / f)

1
ฉันยอมรับว่าวิธีการลดเสียงรบกวนแบบเพอร์ลินนั้นไม่สามารถทำได้ เพื่อตรวจสอบมันฉันพยายามสร้างผลกระทบใน photoshop เริ่มต้นจากเสียงรบกวน perlin นี่คือผลที่ได้ ในขณะที่ฉันคิดว่ามันดูโอเคปัญหาอยู่ที่ปริมาณการปรับแต่งที่ฉันต้องทำ ไม่สามารถคิดวิธีที่จะสร้างขั้นตอนการปรับแต่งทั้งหมดนั้นใหม่ได้ดังนั้นฉันจึงลงคะแนนให้กับวิธีการตามเทพดาที่ทิมโฮลท์แนะนำ
David Gouveia
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.