(sim) การเขียนเชดเดอร์สำหรับทรงกลม Vegas
(whenistheweekend.com)- หน้า The Sphere แสดงตัวอย่าง 5 รายการและชิ้นส่วนเชดเดอร์ GLSL เพื่อสาธิตวิธีคำนวณสีบนพื้นผิวทรงกลม
- อินพุตของเชดเดอร์ประกอบด้วย
time,vUv,vNormalโดยเวลาและพิกัด UV เป็นแกนหลักของการเปลี่ยนสี main()คำนวณสีสุดท้ายของแต่ละพิกเซลด้วยการใส่vec4(...)ลงในgl_FragColor- ค่า RGB ถูกสร้างโดยอิงจาก
cos(time + vUv.xyx + vec3(0., 2., 4.))เพื่อแสดง การเปลี่ยนแปลงตามเวลา vNormalที่ประกาศไว้ไม่ได้ถูกใช้ในชิ้นส่วนโค้ดที่ให้มา จึงไม่มีผลต่อการคำนวณสีในปัจจุบัน
โครงสร้างหน้า The Sphere
- ชื่อเรื่องคือ The Sphere
- ในเนื้อหามีการระบุตัวอย่างตั้งแต่
example 1ถึงexample 5 - จากนั้นมีโค้ดเชดเดอร์ที่ดูเหมือนเป็น GLSL วางอยู่
ลำดับการทำงานของโค้ดเชดเดอร์ GLSL
- ตัวแปรอินพุตมีสามตัว ได้แก่
time,vUv,vNormaltimeเป็นuniform floatvUvเป็นvarying vec2vNormalเป็นvarying vec3
- ฟังก์ชัน
main()ตั้งค่าgl_FragColor - สีถูกคำนวณในรูปแบบ
0.5 + 0.5 * cos(...) - อินพุตของ
cos()ประกอบด้วย ค่าเวลา,vUv.xyxและvec3(0., 2., 4.) - ค่าอัลฟาถูกกำหนดคงที่เป็น
1.
1 ความคิดเห็น
ความคิดเห็นบน Hacker News
ทำเอฟเฟกต์ Matrix ให้ทำงานได้แล้ว
พยายามจะปรับ UV ให้เห็นด้านบนของทรงกลมแต่ก็ยอมแพ้ไป แต่พบว่าสามารถอ้างอิง uniform ของ three.js อย่าง projectionMatrix และ modelViewMatrix ได้ เพียงประกาศไว้ที่ด้านบนของ GLSL
ทำ Penrose tiling แบบคงที่ขึ้นมา: https://gist.github.com/vjeranc/265db912d4004c7c0b0f16ae5fda...
ทรงกลมไม่ใช่อนันต์ ดังนั้นการใช้ tiling แบบไม่เป็นคาบจึงไม่มีความหมายเชิงปฏิบัติมากนัก แต่ก็ยังดูสวยอยู่ดี
ยังไม่รู้ว่ามีชุดแผ่นกระเบื้องหรือโมโนไทล์ที่คล้ายกันซึ่งสามารถปูบนกรวยอนันต์ได้หรือไม่
แม้จะยังเป็นคำถามที่น่าสนใจ แต่ก็ยากจะขุดต่อเพราะยังไม่ชัดพอว่าการฉายภาพแบบไหนถึงจะมีความหมาย
ออกนอกประเด็นไปนิด แต่สิ่งที่น่าทึ่งคือ The Sphere เป็นโครงการวิศวกรรมขนาดใหญ่แค่ไหน
ตั้งแต่ตัวโครงสร้างเอง ไปจนถึงการซิงก์แผง LED หลายพันแผงทั้งภายในและภายนอกทรงกลม การระบายความร้อนท่ามกลางอากาศร้อนของลาสเวกัส และการทำให้ที่นั่งภายใน 18,000 ที่เย็นพอและมีอากาศถ่ายเทเพียงพอ
แม้แต่อาคารสำนักงานธรรมดาหลายแห่งยังระบายอากาศได้ไม่ดีเลย
ลองทำ smiley.frag แบบง่าย ๆ: https://gist.github.com/nickbarth/4ec5147bd1288fd2bcfc4c5b46...
โปรเจกต์ดีมาก
ถ้าแต่ละโค้ดมี URL แยกของตัวเองก็น่าจะแชร์ได้ง่ายขึ้น อาจใช้วิธีฝังโค้ดไว้ใน URL ก็ได้
ทำเชดเดอร์ หน้ายิ้ม ขนาดใหญ่ขึ้นมา
เป็นโค้ด GLSL ที่ใช้
sdRingทำปาก ใช้สมมาตรซ้ายขวาจัดการดวงตาในทีเดียว แล้วแสดงผลเป็นสีเหลืองเพิ่งลองเล่นเชดเดอร์ครั้งแรกและทำ แตงโมหมุนได้ ขึ้นมา
พอจะเข้าใจว่ามันจัดการ RGB tuple,
fract()ดูเหมือนการหารเอาเศษ, และนำค่านั้นมายกกำลังสองแล้วบวกกันเพื่อทำแถบที่นุ่มนวล แต่ก็ยังไม่ชัดว่าเชดเดอร์ทำงานอย่างไรแน่vUvคืออะไร และgl_FragColorถูกนำไปกำหนดที่ไหนจากนั้นก็แบ่งสามเหลี่ยมออกเป็นชิ้นย่อยหรือพิกเซล และรัน fragment shader สำหรับแต่ละชิ้น
ในที่นี้อินพุตคือ uniform
timeที่มีค่าเดียวกันสำหรับทุกชิ้น และvUvที่ถูกส่งออกมาจาก vertex แล้วถูกทำ linear interpolation ภายในสามเหลี่ยม โดยvUvสอดคล้องกับพิกัดพิกเซลบนทรงกลมgl_FragColorคือเอาต์พุตสี RGBA ที่จะถูกใช้กับชิ้นนั้นถ้าเป็นเชดเดอร์ในเกมทั่วไปหรือ Google Earth ก็จะมีการทำ texture และแสงเพิ่มเข้ามา และแม้โมเดลการทำงานของ GPU จะดูเหมือนเราเขียนโค้ดให้ทีละพิกเซล แต่จริง ๆ แล้วเป็นแบบ SIMT ดังนั้น NVIDIA จะประมวลผลครั้งละ 32 พิกเซล และ AMD ครั้งละ 64 พิกเซล
โดยทั่วไปสามารถมองได้ว่าเงื่อนไข
ifจะถูกแปลงเป็นการคำนวณแบบมีเงื่อนไขที่รันทั้งสองทางน่าจะชอบ https://www.shadertoy.com/ ด้วย
เชดเดอร์จาก https://www.glslsandbox.com ก็น่าดูเหมือนกัน
แต่ต้องระวัง เพราะที่นั่นมักมีคนที่ยังไม่โตพออัปโหลด เชดเดอร์ NSFW บ่อย ๆ และดูเหมือนผู้ดูแลจะไม่ได้ตรวจละเอียดมากนัก
เลยชวนให้สงสัยว่าความซับซ้อนแบบโคลโมโกรอฟของ “คอนเทนต์ GLSL แบบ NSFW” จะอยู่ประมาณไหน
https://www.glslsandbox.com/e#108133.0
NSFW: https://www.glslsandbox.com/e#108230.3
ในคอมเมนต์ของโค้ดมีพรอมป์ต์ที่บอกให้ ChatGPT ทำตัวละครให้อ้วนขึ้น เพิ่มเส้นเลื่อนฉากหลัง เปลี่ยนสี และเพิ่มอวัยวะบางส่วน
ดีมากเลย
ในโปรเจกต์ isocity ของฉัน มีคนส่งวิธีแก้ที่ทำให้แชร์เมืองที่สร้างขึ้นผ่าน URL ได้
น่าจะทำแบบคล้ายกันได้: https://github.com/victorqribeiro/isocity/commit/c6588171e37...
The Sphere น่าจะเป็นสถานที่ที่ยอดเยี่ยมสำหรับจัดเดโมปาร์ตี้
https://en.wikipedia.org/wiki/Demoscene#Parties