คอมพิวเตอร์กราฟฟิค

ถาม - ตอบสำหรับนักวิจัยคอมพิวเตอร์กราฟิกและโปรแกรมเมอร์

2
วิธีการ unproject สี่เหลี่ยมสามเหลี่ยมเป็นสี่เหลี่ยม?
tl; dr: ปัญหาทางคณิตศาสตร์ในเรขาคณิตของ Projective: เราจะหาเมทริกซ์กล้อง 4x4 บางตัวที่ให้ภาพดังที่แสดงไว้ด้านล่างเช่นจุด A, B, C, D อยู่ที่ไหนสักแห่งบนขอบของกล่องหน่วย (เช่นอุปกรณ์มาตรฐาน OpenGL พิกัด) และมุมของกล่องยูนิตอยู่ในจุดที่เหมาะสมตามแนว EA, EB, EC, ED? (นี่อาจเป็นกรณีพิเศษที่เป็นไปได้ของการทำ homography, perspectivity และ / หรือ collineation ไม่คุ้นเคยกับคำศัพท์) รายละเอียดเพิ่มเติม ให้ ABCD รูปสี่เหลี่ยมสามรูปในวิวพอร์ตฉันคิดว่ามีการแปลง (?) ที่ไม่ซ้ำกันซึ่งแมปกลับไปเป็นรูปสี่เหลี่ยมผืนผ้า ดังที่เห็นในภาพด้านล่าง: ABCD รูปสี่เหลี่ยมในวิวพอร์ตทำหน้าที่เป็น 'หน้าต่าง' ทางกายภาพและถ้าเราแมปกลับไปที่สี่เหลี่ยมผืนผ้ามันจะปรากฏผิดเพี้ยน (ช่องทางด้านขวาแสดงถึง NDC ซึ่งฉันพูดถึงในภายหลัง) เป้าหมายคือการได้รับภาพทางด้านขวาอย่างรวดเร็ว เราสามารถ raytrace ทุกจุดเพื่อให้ได้ภาพ (ซึ่งฉันได้ทำไปแล้ว) แต่ฉันต้องการใช้ OpenGL หรือเทคนิคการฉายภาพอื่น …

1
การใช้ LUT เพื่อเพิ่มความเร็วในการเรียกใช้งานหนักสำหรับอุปกรณ์เคลื่อนที่
ฉันพยายามทำให้shader นี้ทำงานบน iDevice ที่เก่าแก่มากรวมถึง Android ในที่สุด แม้ว่าฉันจะลดรหัสให้เหลือ 2 ฟังก์ชันไซน์ต่อชิ้นส่วน Shader ก็ทำงานที่ประมาณ 20fps ฉันได้พิจารณานำใบไม้ออกมาจากหนังสือเทคนิคการแรเงาแบบเก่าและสร้างอาร์เรย์ที่เก็บค่าตรีโกณมิติที่กำหนดไว้ล่วงหน้าจำนวนหนึ่งและใช้วิธีเหล่านั้นเพื่อประมาณค่าส่วนแบ่ง ใน shader ฉันเชื่อมโยงด้านบนฉันได้จำลองแล้วว่าการปัดเศษค่าที่ส่งไปยังฟังก์ชันตรีโกณมิติยิ่งปล่อยเมาส์ (ขณะลง) ให้คุณภาพของ shader ยิ่งน้อยลง จริงๆแล้วมันค่อนข้างเท่ห์เพราะอยู่ใกล้กับทางด้านซ้ายมันดูเหมือนแตกต่างอย่างสิ้นเชิงและเท่ห์มาก ๆ อย่างไรก็ตามฉันมีสองประเด็นขัดแย้ง: ฉันไม่ทราบว่าวิธีที่มีประสิทธิภาพมากที่สุดในการมีอาร์เรย์ค่า 360 เช่นอะไรใน GLSL shader ค่าคงที่หรือสม่ำเสมอ? ฉันไม่สามารถหาวิธีใส่ตัวเลขในช่วงปกติได้ถ้าฉันต้องการมุมระหว่าง 0 ถึง 360 (ใช่ฉันรู้ว่า GPU ใช้เรเดียน) ฉันจะทำเช่นนั้น func range(float angle) { float temp = angle while (temp > 360) {temp …

1
แสดงผลในหน่วย radiometric หรือ photometric?
ในการเรนเดอร์แบบดั้งเดิมมันเป็นเรื่องปกติที่จะทำการคำนวณทั้งหมดด้วยหน่วยคลื่นวิทยุไม่ว่าจะเป็นการเรนเดอร์สเปกตรัมแบบเต็มหรือองค์ประกอบที่ชาญฉลาด (XYZ, RGB, ฯลฯ ) อย่างไรก็ตามในขณะที่การเรนเดอร์ที่ทันสมัยเพิ่มแบบจำลองทางกายภาพมากขึ้นจึงสะดวกสำหรับศิลปินที่จะสามารถระบุค่าในหน่วยวัดแสงที่คุ้นเคยมากขึ้นเช่นความเข้มของแสงเป็นลูเมน ในการเก็บรักษาท่อทั้งหมดในหน่วยประเภทเดียวคุณสามารถทำอย่างใดอย่างหนึ่งต่อไปนี้: แปลงหน่วยวัดความเข้มแสงเป็นหน่วยวัดความเข้มแสงโดยใช้ประสิทธิภาพการส่องสว่าง เก็บไปป์ไลน์การเรนเดอร์ทั้งหมดในหน่วยวัดแสง Sébastian Lagarde นำเสนอความคิดนี้เป็นอย่างดีในบันทึกหลักสูตรของการนำเสนอ Siggraph 2014 การนำเสนอการย้าย Frostbite ไปยัง PBR คำถามของฉันคือคำถามเหล่านี้: มีข้อเสียใด ๆ ในการเรนเดอร์เฉพาะในหน่วยวัดความเข้มแสงหรือไม่? เท่าที่ฉันสามารถบอกได้หน่วยวัดความเข้มแสงเป็นเพียงหน่วยความเข้มแสงที่มีความลำเอียงต่อสายตามนุษย์ เมื่อพิจารณาว่าเราจะดูภาพสุดท้ายด้วยตาของฉันฉันไม่เห็นว่าเป็นปัญหา Frostbite เป็นเครื่องมือที่ชาญฉลาดสำหรับส่วนประกอบ RGB Spectre renderer จะมีข้อเสียเพิ่มเติมใด ๆ โดยการเรนเดอร์เฉพาะในหน่วยวัดแสงหรือไม่?

3
ภาพ HDR แบบ 16 บิตครึ่งลอยเป็นพื้นผิว (กระจาย / อัลเบโด้)?
ดังนั้นฉันจึงคิดถึงเรื่องนี้ซักพักหนึ่งแล้วลอง google เพื่อหาคำตอบ แต่ก็ไม่ประสบความสำเร็จ หากพื้นผิวทั้งหมดของคุณเป็นภาพ 8 บิต LDR เช่น JPEG ไม่สามารถทำให้เกิดความขัดแย้งกับการควบคุมการเปิดรับแสง / การทำแผนที่โทนเมื่อแสดงผล นั่นคือถ้าคุณปรับการแสดงผลการรับแสงของภาพของคุณที่ควรเปิดเผยรายละเอียดในพื้นผิวที่ไม่ได้มีจริงเพราะพวกเขาถูกยึดโดยช่วงไดนามิกต่ำ ดังนั้นจึงไม่มีเหตุผลที่จะมีพื้นผิวเป็นภาพ HDR ที่บันทึกเป็น. exr ในพื้นที่สีเชิงเส้นด้วย 16 บิตครึ่งลอยเพื่อให้ได้สีที่ดี (32 บิต "เต็ม" ลอยอาจเกินหรือไม่) เพื่อให้มีรายละเอียดและค่าสีที่ถูกต้องฉันอาจคิดว่ามีผลกระทบต่อ GI และคำนวณการตกเลือดของสีอย่างไร หรือมันไม่จำเป็นเพียงเพราะผลลัพธ์สุดท้ายของการเรนเดอร์ที่เราต้องการนั้นอาจจะคล้ายกับระดับการเปิดรับแสงของพื้นผิวเมื่อถ่ายภาพด้วยวิธีใด? และเนื่องจากกล้องส่วนใหญ่ถ่ายภาพที่ 12-14 บิตคุณจะต้องใช้การเปิดรับแสงหลาย ๆ พื้นผิวและทำงานพิเศษทั้งหมดเพื่อรวมเข้าด้วยกันเป็นหนึ่ง HDRI แก้ไข: เพื่อความกระจ่างฉันส่วนใหญ่สนใจในเรื่องนี้จากมุมมองการเรนเดอร์ภาพถ่ายจริงด้วยเรย์เรนเดอร์เรกเกอร์ (เช่นจิตเรย์, วีเรย์, อาร์โนลด์ ฯลฯ ) ด้วยการจำลองแสงเต็มรูปแบบ เอ็นจินเกมแบบเรียลไทม์

1
เหตุผลของข้อสมมติฐานสำหรับฟังก์ชันการกระจายไมโครฟอสต์หรือไม่
แบบจำลองกระดาษไมโครไฟเบอร์สำหรับการหักเหผ่านพื้นผิวขรุขระ (ในหมู่อื่น ๆ ) ทำให้เรานึกถึงสมมติฐานต่อไปนี้เกี่ยวกับฟังก์ชั่นการกระจาย microfacet D: ความหนาแน่นของไมโครไฟเบอร์เป็นค่าบวก พื้นที่ microsurface ทั้งหมดอย่างน้อยใหญ่เท่ากับพื้นที่ของ macrosurface ที่เกี่ยวข้อง พื้นที่ฉาย (ลงนาม) ของ microsurface เหมือนกับพื้นที่ฉายของ macrosurface สำหรับทิศทางใด ๆ v ฉันสามารถดูได้ว่าทำไม 1) ความหนาแน่นของการกระจายเป็นค่าบวกและโดยสังหรณ์ใจเชื่อว่า 2) หมายความว่าพื้นที่ทั้งหมดของ microfacets ที่ลาดเอียงต้องไม่เล็กกว่าที่คาดไว้ อย่างไรก็ตามฉันไม่แน่ใจว่าเข้าใจเหตุผลสำหรับ 3) เงื่อนไขที่สามหมายความว่าอย่างไร

1
“ ปิดเสียง” หมายความว่าอย่างไรในบริบทของสี
ฉันต้องการแยกสีจากภาพเหมือนใน Adobe Kuler เมื่อฉันเลือกสีสันที่สอดคล้องกันหรือปิดเสียงสีที่เกี่ยวข้องจะปรากฏขึ้น แต่คำจำกัดความของสีที่มีสีสันหรือปิดเสียงคืออะไร? คำว่า "สีสัน", "ลึก" และ "ปิดเสียง" หมายถึงอะไร
10 color 


2
เมื่อใช้การเติมแบบใหม่และการเรนเดอร์ที่ทันสมัย
ตัวอย่างเช่นในขณะที่มันเป็น GPU อันดับต้น ๆ ของสายการผลิตนั้น GTX 980 มีอัตราการเติม 72.1 กิกะบิตต่อวินาทีที่สองซึ่งมีการเรนเดอร์กลับไปด้านหน้าและ / หรือการตรวจสอบบัฟเฟอร์ Z ดูเหมือนว่ามีขนาดใหญ่เกือบน่าขัน ที่ความละเอียด 4k เท่าที่โพลิกอนนับไป GPU สมัยใหม่สามารถทำรูปสามเหลี่ยมพื้นผิวได้หลายสิบถึงหลายร้อยล้านชิ้นโดยไม่มีการผูกปมหากคุณแบทช์และ / หรือสร้างอินสแตนซ์ให้ถูกต้อง ด้วยการเรนเดอร์เรนเดอร์ปริมาณของชิ้นส่วนที่ shaders จะทำงานจะสามารถครอบงำได้อย่างรวดเร็ว แต่ด้วยการเรนเดอร์ที่เลื่อนออกไปค่าใช้จ่ายมักจะคงที่มากหรือน้อยขึ้นอยู่กับความละเอียดและเราตั้งนาน เอฟเฟกต์หลังการประมวลผลสามารถทำได้แบบเรียลไทม์ใน 1080p ไม่ว่าจะด้วยวิธีใดปัจจัยที่ จำกัด ในปัจจุบันส่วนใหญ่คือการนับจำนวนการโทรและค่าใช้จ่ายในการแรเงาซึ่งทั้งสองอย่างนั้นยังคงอยู่ในระดับต่ำโดยการเรนเดอร์ที่เหมาะสมและการแบทช์ทางเรขาคณิต รูปหลายเหลี่ยม frustrum ของผลประโยชน์ที่สำคัญใด ๆ ? ค่าใช้จ่าย (เวลา CPU / GPU, เวลาโปรแกรมเมอร์) จะไม่มากไปกว่าประโยชน์ที่ได้รับจำนวนมากใช่ไหม

1
การประสานของเสียงประสานครึ่งวงกลม
Spherical Harmonics (SH) เป็นวิธีการแสดงฟังก์ชั่นทรงกลมความถี่ต่ำที่มีค่าสัมประสิทธิ์เพียงไม่กี่ พวกมันมีคุณสมบัติทางคณิตศาสตร์ที่ดีเช่นการแปลงด้วยฟังก์ชันเคอร์เนลh (x) (ที่มีสมมาตรแบบวงกลม) สามารถคำนวณได้ ในกรณีที่มีการบิดด้วยโคไซน์พูสำหรับอันดับ 3 SH นี่จะทำให้การปรับขนาดของวงดนตรีง่ายขึ้นด้วยปัจจัย ในหลายกรณีเช่นแสงตกกระทบสำหรับจุดที่กำหนดบนพื้นผิวทึบแสงไม่จำเป็นต้องใช้ข้อมูลทรงกลมเต็มรูปแบบเนื่องจากครึ่งหนึ่งของทรงกลมเป็นศูนย์ / ไม่ได้กำหนด / ไม่ได้ใช้ต่อไป ดังนั้นHemispherical Harmonics (HSH) จึงเกิดขึ้น การบิดด้วยเคอร์เนลตามอำเภอใจ (ที่มีสมมาตรแบบวงกลม) ทำงานอย่างไรกับ HSH การสนทนาจาก SH สามารถขยายออกไปหรือมีกระดาษแผ่นไหนที่ให้รายละเอียดเกี่ยวกับเรื่องนี้?
10 hemisphere 

1
การจัดตำแหน่งและการประกาศของเครื่องแบบมีความสำคัญหรือไม่?
ในส่วน6.4 บัฟเฟอร์คงที่ของหนังสือการแสดงผลและการคำนวณเชิงปฏิบัติด้วย Direct3D 11 (หน้า 325, 326) มีการกล่าวถึง: โดยค่าเริ่มต้นคอมไพเลอร์ HLSL จะพยายามจัดตำแหน่งค่าคงที่ซึ่งจะไม่ขยายการลงทะเบียน float4 หลายรายการ [... ] การบรรจุสำหรับบัฟเฟอร์คงที่ HLSL ยังสามารถระบุด้วยตนเองผ่านคีย์เวิร์ด packoffset ฉันคิดว่ากฎที่คล้ายกันจะใช้กับ OpenGL ที่เทียบเท่ากันคือ Uniform Buffer Objects เนื่องจากจะจับคู่กับคุณสมบัติฮาร์ดแวร์เดียวกัน แล้วเครื่องแบบวนิลาล่ะ กฎที่บังคับใช้เมื่อประกาศเครื่องแบบคืออะไร uniform vec2 xy; // Can we expect the compiler to pack xy uniform vec2 zw; // into a same four component register? …

1
ไปป์ไลน์เพื่อสร้าง Voronoi Meshes
ฉันต้องการนำปลั๊กอินมายา (คำถามนี้ไม่ขึ้นอยู่กับมายา) เพื่อสร้างรูปแบบ 3D Voronoi อย่างที่ต้องการ ฉันเพิ่งรู้ว่าฉันต้องเริ่มจากการสุ่มตัวอย่างแบบจุด (ฉันใช้อัลกอริทึมการสุ่มตัวอย่างแบบปัวซองแบบปรับตัวที่อธิบายไว้ในบทความนี้ ) ฉันคิดว่าจากจุดเหล่านั้นฉันควรสร้างลวดสามมิติของตาข่ายโดยใช้ Voronoi (ฉันพยายามใช้ (Python) scipy.spatial.Voronoi แต่ผลลัพธ์นั้นแตกต่างจากที่ฉันคาดไว้) ฉันทำอะไรบางอย่างหายไป? ใครสามารถแนะนำขั้นตอนและอัลกอริทึมที่เหมาะสมที่ฉันต้องใช้ในการสร้างรูปแบบดังกล่าวได้หรือไม่? [แก้ไข] ต่อไปนี้เป็นตัวอย่างของสิ่งที่ฉันจัดการผลลัพธ์ที่ได้จาก scipy.spatial.Voronoi เช่นนี้ (ตามที่แนะนำไว้ที่นี่ ): vor = Voronoi(points) for vpair in vor.ridge_vertices: for i in range(len(vpair) - 1): if all(x >= 0 for x in vpair): v0 = vor.vertices[vpair[i]] v1 = vor.vertices[vpair[i+1]] …
10 3d  geometry  mesh  polygon 

2
การใช้แผนที่พื้นผิวหลายอย่างไม่ดีสำหรับการแคชหรือไม่?
หากฉันมีพื้นผิวหลายอย่าง (พูดว่าแผนที่มากกว่า 5 แผนที่) ไปยังหน่วยพื้นผิวเดียวกันมันจะทำงานได้แย่กว่าแคชมากกว่าถ้าฉันมีเพียง 2 หรือ 3 พื้นผิว?

1
Ray Tracing with Cones: ความครอบคลุมการซ้อนทับและการจดสามเหลี่ยม
ในกระดาษคลาสสิกของเขาการติดตามเรย์กับโคนจอห์นอามานาเตะอธิบายการเปลี่ยนแปลงในการติดตามเรย์คลาสสิก ด้วยการขยายแนวคิดของรังสีด้วยมุมรับแสงทำให้เป็นรูปกรวยเอฟเฟกต์นามแฝง (รวมถึงสิ่งที่มาจากตัวอย่างมอนติคาร์โลน้อยเกินไป) สามารถลดลงได้ ในระหว่างจุดตัดรูปสามเหลี่ยมกรวยค่าความครอบคลุมสเกลาร์จะถูกคำนวณ ค่านี้แทนเศษส่วนของกรวยที่ครอบคลุมโดยสามเหลี่ยม ถ้ามันมีค่าน้อยกว่าก็หมายความว่าสามเหลี่ยมนั้นไม่ครอบคลุมกรวยอย่างเต็มที่ ต้องทำการทดสอบเพิ่มเติม อย่างไรก็ตามหากไม่มีการใช้เทคนิคขั้นสูงมากขึ้นเราจะรู้ได้ว่ากรวยนั้นครอบคลุมเท่าไหร่ แต่ไม่ใช่ส่วนใด111 Amanatides กล่าวว่า: เนื่องจากในปัจจุบันมีเพียงค่าความครอบคลุมเศษส่วนในการผสมการมีส่วนร่วมจากวัตถุต่าง ๆ พื้นผิวที่ทับซ้อนกันจะถูกคำนวณอย่างถูกต้อง แต่พื้นผิวที่อยู่ติดกันจะไม่ถูกคำนวณ สิ่งนี้ไม่สมเหตุสมผลสำหรับฉัน จากมุมมองของฉันมันเป็นวิธีอื่น ๆ ลองมาตัวอย่าง: เรามีรูปสามเหลี่ยมสองอันที่ต่อกัน , สีเขียวและสีน้ำเงินหนึ่งอัน, ซึ่งแต่ละอันครอบคลุมถึง 50% ของรูปกรวยของเรา พวกเขาอยู่ในระยะทางเดียวกันจากผู้ชม สามเหลี่ยมสีเขียวจะถูกทดสอบก่อน มันมีค่าความครอบคลุม 0.5 ดังนั้นสามเหลี่ยมสีน้ำเงินจึงถูกทดสอบถัดไป ด้วยค่าความครอบคลุมสีน้ำเงินที่ 0.5 กรวยของเราครอบคลุมอย่างสมบูรณ์ดังนั้นเราจึงเสร็จสิ้นและจบลงด้วยการผสม 50:50 สีเขียวสีน้ำเงิน ที่ดี! ตอนนี้คิดว่าเราฆ่าสามเหลี่ยมสีฟ้าและเพิ่มสีแดงบางระยะทางที่อยู่เบื้องหลังสีเขียว - ทับซ้อนกัน Greeny ให้ความคุ้มครองแก่เรา 0.5 อีกครั้ง เนื่องจากเราไม่มีสีน้ำเงินเพื่อทำการทดสอบอีกต่อไปเราจึงมองลงไปที่กรวยและหาสีแดงในไม่ช้า นี่จะส่งกลับค่าความครอบคลุมบางส่วนที่มากกว่า 0 ซึ่งไม่ควรเป็นเพราะอยู่ด้านหลังสีเขียว ดังนั้นจากนี้ฉันสรุปว่าสามเหลี่ยมที่จดจ่อทำงานได้ดีในขณะที่สามเหลี่ยมที่ซ้อนทับกันจะต้องใช้เวทย์มนตร์มากขึ้นเช่นมาสก์ครอบคลุมให้ถูกต้อง นี่คือสิ่งที่ตรงกันข้ามกับสิ่งที่อมานาติเดสพูด …
10 raytracing 

1
ฉันสามารถ raytrace เลนส์ความโน้มถ่วงโดยใช้เพียงจุดเดียวของแรงโน้มถ่วงได้หรือไม่?
ฉันต้องการจำลองการขยายของวัตถุที่อยู่ไกลมากโดยเอฟเฟกต์เลนส์ของกาแลคซีที่ห่างไกลน้อยกว่า ฉันจะต้องสร้างแบบจำลองจำนวนมากของมวลจุดหรือฉันจะไปกับมวลจุดเดียวเฉลี่ย? ฉันสามารถดูวิธี raytrace โดยใช้ไฮเพอร์โบลาสำหรับรังสีที่ได้รับอิทธิพลจากมวลจุดเดียว แต่ฉันไม่รู้ว่าจะเริ่มต้นที่จุดมวลหลายจุดได้อย่างไร ดังนั้นก่อนที่ฉันจะพยายามสร้าง raytracer นี้ฉันอยากจะรู้ว่าฉันจะสามารถหลีกเลี่ยงฝูงจำนวนมากได้หรือไม่และยังมีผลลัพธ์ที่น่าเชื่อถือ
10 raytracing 

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

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.