Fandom

Thai Blender Wiki

Main Article/3D computer graphics/Surface normal

< Main Article | 3D computer graphics

105pages on
this wiki
Add New Page
Talk0 Share

Ad blocker interference detected!


Wikia is a free-to-use site that makes money from advertising. We have a modified experience for viewers using ad blockers

Wikia is not accessible if you’ve made further modifications. Remove the custom ad blocker rule(s) and the page will load as expected.

TODO
  • ใช้ Blender 2.5 อ้างอิงแทน การ upload screenshot ควรระบุเวอร์ชันให้ชัดเจน
  • ไว้เนื้อหานิ่งแล้วค่อยทำส่วน footer สำหรับหน้าก่อน/หน้าต่อไป
  • เพิ่มส่วนเกม
  • ยุบรวมส่วน Blender เข้ากับส่วน 3D computer graphics โดยเพิ่มส่วน User Interface แยกไว้เป็นบท Blender 101
จัดการเมนู

นอร์มอล (surface normal) Edit

FIXME
แปะๆไว้ก่อน สำหรับเนื้อหาที่ลิงก์ไปวิกิพีเดียภาษาไทยบางส่วนอาจยังไม่มีอยู่จริง ก็เอาไว้ค่อยไปตามเขียน และควรแยกโซนเพราะบางส่วนอาจละเอียดเกินความจำเป็นสำหรับบางงาน
Normal กับการสะท้อนแสง.png

นอร์มอล (normal) กับการสะท้อน โดยมุมตกกระทบ (θi) จะมีค่าเท่ากับมุมสะท้อน (θr)

surface normal หรือ นอร์มอล ค่าเวกเตอร์ที่ตั้งฉากกับพื้นผิวราบ สำหรับพื้นผิวที่ไม่เรียบ ค่านอร์มอลที่จุดใดๆบนพื้นผิวคือค่าเวกเตอร์ที่ตั้งฉากกับระนาบสัมผัสที่สัมผัสพื้นผิวที่จุดนั้น หรือตั้งฉากกับเส้นสัมผัสเส้นโค้งในกรณีสองมิติ

ในคอมพิวเตอร์กราฟิกส์สามมิตินิยมใช้ค่านอร์มอลกำหนดมุมระหว่างทิศทางที่พื้นผิวหันไปทำกับทิศทางของต้นกำเนิดแสงเพื่อเพื่อคำนวณการสะท้อนแบบ flat shading หรือใช้กำหนดที่มุมแต่ละมุมของพื้นผิวโพลีกอน (vertex normal) เพื่อใช้เกลี่ยค่านอร์มอลของสองพื้นผิวที่ติดกันเข้าหากัน ทำให้พื้นผิวที่ทำมุมกันสามารถสะท้อนแสดงได้เหมือนกับเป็นพื้นผิวเรียบโค้ง (phong shading)

นอร์มอลของเวอร์เทกซ์ (vertex normal) Edit

Vertex normal.png

vertex normal กับการเปลี่ยนแปลงการสะท้อนของพื้นผิว (a) vertex normal ชี้ไปทิศทางเดียวกับ surface normal (b) vertex normal ชี้ไปในทิศทางเดียวกับ vertex normal ของพื้นผิวข้างเคียง การสะท้อนแสงจึงต่อเนื่องเสมือนเป็นพื้นผิวเดียวกัน

นอร์มอลมีผลกับการหักเห.png

นอกจากการเฉลี่ยนอร์มอลจะมีผลกับการสะท้อนแล้วยังมีผลกับการหักเห

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


การคำนวณ Edit

ค่านอร์มอลมักจะถูกคำนวณโดยอัตโนมัติโดยซอฟต์แวร์ อย่างไรก็ตาม ซอฟต์แวร์อาจยอมให้ผู้ใช้กำหนดค่านอร์มอลได้อย่างอิสระ เช่นการใช้นอร์มอลแมป หรือการตั้งค่าเวกเตอร์ของนอร์มอลโดยตรง


ในส่วนนี้จะกล่าวถึงแนวทางคร่าว ๆ สำหรับการคำนวณแสงแบบต่าง ๆ ไว้บ้าง หากยากต่อความเข้าใจก็ข้ามไปก็ได้

การคำนวณทิศทาง Edit

การหาค่านอร์มอลของโพลีกอน สามารถหาได้จากผลคูณไขว้ของเวกเตอร์ขอบสองด้านที่ไม่ขนานกันของโพลีกอน ค่านอร์มอลจะมีสองค่าชี้ไปในทิศทางตรงข้ามกัน จึงอาจใช้กฎมือขวาร่วมกำหนดทิศทางที่นอร์มอลหรือหน้าของโพลีกอนหันไป

ถ้าระนาบเกิดจากสมการ ax+by+cz=d เวกเตอร์ (a, b, c) จะเป็นค่านอร์มอลของระนาบ ถ้าพื้นผิว(ที่อาจไม่เรียบ) S ถูกพาราเมไทรซ์ในระบบพิกัดเชิงเส้นโค้ง x(s, t) โดยจำนวนจริง s และ t ค่านอร์มอลจะหาได้จากผลคูณไขว้ของอนุพันธ์บางส่วน

{\partial \mathbf{x} \over \partial s}\times {\partial \mathbf{x} \over \partial t}.

การคำนวณค่าความสว่าง Edit

การคำนวณแสงสะท้อนแบบ Lambertian (หรือ diffuse) ซึ่งไม่ขึ้นกับทิศทางผู้มองนั้นหาค่าความสว่างได้จากผลคูณจุดของเวกเตอร์หนึ่งหน่วยจากจุดที่จะให้สีไปยังจุดกำเนิดแสง กับเวกเตอร์หนึ่งหน่วยนอร์มอลตรงจุดที่จะให้สีนั้น ผลที่ได้คือค่าความเข้มหรือความสว่างของแสงที่จุดนั้น

I_{D}=\mathbf{L}\cdot\mathbf{N}*C*I_{L}

I_{D} ค่าความเข้มแสงที่สะท้อนแบบ diffuse, \mathbf{L} ค่าเวกเตอร์หนึ่งหน่วยจากจุดตกกระทบไปยังจุดกำเนิดแสง, \mathbf{N} ค่านอร์มอลเวกเตอร์หนึ่งหน่วย, C สี และ I_{L} คือความเข้มแสงขาเข้า

การใช้ลำดับของ vertex กำหนดค่า normal Edit

ลำดับของ vert ยังอาจถูกใช้ในการกำหนดทิศทางที่นอร์มอล ของ face หันไปโดยการใช้ร่วมกับกฎมือขวา เช่น ถ้ามี vert 3 vert a b และ c ถูกโยง edge เป็นวง จาก abca ตามลำดับ normal ของ face จะหันไปทิศทางหนึ่ง แต่ถ้าเปลี่ยนลำดับโดยวนย้อนกลับเป็น acba normal ของ face จะหันกลับไปในทิศตรงข้าม

Also on Fandom

Random Wiki