ฉันเห็นแนวทางกว้าง ๆ สองสามข้อเพื่อทำการแรเงา cel:
- การทำซ้ำและการขยายรูปแบบด้วยบรรทัดฐานพลิก (ไม่ใช่ตัวเลือกสำหรับฉัน)
- Sobel filter / fragment shader เข้าใกล้การตรวจจับขอบ
- บัฟเฟอร์ของลายฉลุเข้าหาการตรวจจับขอบ
- วิธีการ Shader ของเรขาคณิต (หรือจุดสุดยอด) ที่คำนวณบรรทัดฐานใบหน้าและขอบ
ฉันถูกต้องหรือไม่ถ้าสมมติว่าวิธีเรขาคณิตเป็นศูนย์กลางช่วยให้สามารถควบคุมปริมาณแสงและความหนาของเส้นได้มากที่สุดเช่นกัน สำหรับภูมิประเทศที่คุณอาจเห็นแนวเงาของเนินเขาค่อยๆรวมกันเป็นที่ราบ
ถ้าฉันไม่ต้องการแสงพิกเซลบนพื้นผิวภูมิประเทศของฉันล่ะ (และฉันอาจจะไม่เป็นอย่างที่ฉันวางแผนที่จะใช้แสง / เงาบนพื้นผิวที่ใช้กับเซลล์ / แรปแมป) - ฉันจะดีกว่าหากใช้วิธีเรขาคณิต - หรือดีกว่าสำหรับพื้นที่หน้าจอ / ชิ้นส่วนแทน การทำให้สิ่งต่าง ๆ ง่ายขึ้น? ถ้าเป็นเช่นนั้นฉันจะได้รับ "หมึก" ของเนินเขา ในภาพเงาตาข่ายแทนที่จะเป็นเพียงโครงร่างของตาข่ายทั้งหมด (โดยไม่มีรายละเอียด "หมึก" ภายในโครงร่างนั้น) ( รูปทรงที่มีการชี้นำของ AKA , รอยย่น )
สุดท้ายเป็นไปได้ไหมที่จะเลียนแบบวิธีการพลิก - นอร์มัลอย่างประหยัดโดยใช้รูปทรงเรขาคณิต ความกังวลของฉันเกี่ยวกับเรื่องนี้คือฉันสามารถทำซ้ำจุดสุดยอดทุกจุดและปรับขนาดเหล่านี้ได้อย่างแน่นอน แต่ฉันจะเข้าหาการโยนบรรทัดฐานและการระบายสีในส่วนที่แตกต่างกันได้อย่างไร
สิ่งที่ฉันต้องการ - ความหนาของเส้นที่แตกต่างกับเส้นที่ล่วงล้ำภายในรูปเงาดำ ...
สิ่งที่ฉันไม่ต้องการ ...
แก้ไข: การวิจัยเพิ่มเติมได้เปิดขึ้นต่อไปนี้ ...
เนื่องจากฉันมีจุดสุดยอดจำนวนมากบนภูมิประเทศแม้แต่การพิจารณา LoD ที่อิงตามระยะทางไม่ว่าจะเป็นแบบนอร์ม - แบบธรรมดาหรือแบบเรขาคณิตที่ใช้ shader (ถึงแม้จะมีการเลือกสรร frustum) จะเป็นตัวเลือกที่เหมาะสมเนื่องจากความซับซ้อนในการคำนวณที่เกี่ยวข้อง จุดยอดที่อัปโหลด
เมื่อพิจารณาว่าฉันไม่ต้องการแสงต่อพิกเซลในรูปแบบของการแรเงาสีทึบบนพื้นผิวภูมิประเทศมันก็รอบคอบน้อยกว่าที่จะพิจารณาวิธีการตามปกติแบบใบหน้า - มิฉะนั้นความต้องการสำหรับแสงพื้นผิวที่ถูกต้อง - เช่นนี้ มีราคาค่อนข้างแพงในการคำนวณ อย่างไรก็ตามมันเป็นความจริงที่พวกเขาให้ระดับการควบคุมที่ดีที่สุด ตัวอย่างเช่นความสามารถในการแรเงาขอบโดยใช้ลายเส้น "ศิลป์": สวยงาม แต่อีกครั้งไม่สามารถใช้งานได้จริงสำหรับสภาพแวดล้อมเกมที่ซับซ้อนอย่างหนาแน่น
บัฟเฟอร์ของลายฉลุเป็นสิ่งที่ฉันควรหลีกเลี่ยงเพราะฉันอยากจะทำงานทั้งหมดในเฉดสี (ตัวอย่างข้างต้นที่มีโครงร่างสีแดงทำด้วย stencil buffer - old school)
สิ่งนี้ทำให้วิธีการพื้นที่ภาพส่วนที่แตก ความซับซ้อนในการคำนวณจะลดลงตามจำนวนของชิ้นส่วนแทนที่จะเป็นจำนวนของจุดยอด (ในกรณีของฉันการดำเนินการน้อยกว่า 10-100x น้อยกว่าที่ฉันต้องทำใน shader ทางเรขาคณิต) สิ่งนี้ต้องใช้การเรนเดอร์มากกว่าหนึ่งเพื่อสร้าง g-buffer (ประกอบด้วยบัฟเฟอร์ปกติและเลือกบัฟเฟอร์ความลึกเช่นกัน) ซึ่งเราสามารถใช้ตัวกรองความไม่ต่อเนื่อง (เช่นตัวดำเนินการ Sobel) ความไม่ต่อเนื่องเชิงลึกคือสิ่งที่ช่วยให้รูปทรงและรอยพับที่มีการชี้นำ การเล่นโวหารเพียงอย่างเดียวของฉันด้วยวิธีนี้คือการไม่สามารถควบคุมความกว้างของขอบหมึกได้ดีขึ้นแม้ว่าจะมีอัลกอริทึมที่ถูกต้องในตัวแบ่งส่วนฉันแน่ใจว่าสิ่งนี้จะเป็นไปได้
ดังนั้นตอนนี้คำถามจึงมีความเฉพาะเจาะจงมากขึ้น:ฉันจะไปเกี่ยวกับการรับความกว้างของขอบตัวแปรได้อย่างไรโดยเฉพาะอย่างยิ่งที่ภาพเงาด้านนอกในส่วนที่แตกออก