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
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 จะหันกลับไปในทิศตรงข้าม

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.

Also on Fandom

Random Wiki