คำถามติดแท็ก hlsl

ภาษาเงาที่เป็นกรรมสิทธิ์ซึ่งพัฒนาโดย Microsoft สำหรับใช้กับ Microsoft Direct3D API

1
การบัญชีสำหรับคลื่นเมื่อทำการสะท้อนระนาบ
ฉันได้ศึกษาตัวอย่างของ Nvidia จาก SDK โดยเฉพาะโครงการIsland11และฉันพบบางสิ่งที่อยากรู้เกี่ยวกับรหัส HLSL ชิ้นหนึ่งซึ่งแก้ไขการสะท้อนขึ้นและลงตามสถานะความสูงของคลื่น โดยธรรมชาติหลังจากตรวจสอบย่อหน้าสั้น ๆ ของรหัส: // calculating correction that shifts reflection up/down according to water wave Y position float4 projected_waveheight = mul(float4(input.positionWS.x,input.positionWS.y,input.positionWS.z,1),g_ModelViewProjectionMatrix); float waveheight_correction=-0.5*projected_waveheight.y/projected_waveheight.w; projected_waveheight = mul(float4(input.positionWS.x,-0.8,input.positionWS.z,1),g_ModelViewProjectionMatrix); waveheight_correction+=0.5*projected_waveheight.y/projected_waveheight.w; reflection_disturbance.y=max(-0.15,waveheight_correction+reflection_disturbance.y); การคาดเดาครั้งแรกของฉันคือมันชดเชยการสะท้อนภาพถ่ายเมื่อถูกก่อกวนในแนวดิ่ง (คลื่น) ขยับเรขาคณิตที่สะท้อนกลับไปยังจุดที่ไม่มีอะไรเกิดขึ้นและน้ำจะปรากฏขึ้นราวกับว่าไม่มีอะไรอยู่หรือแค่ท้องฟ้า: ทีนี้, นั่นคือท้องฟ้าที่สะท้อนให้เห็นซึ่งเราควรเห็นการสะท้อนสีเขียว / เทา / เหลืองของภูมิประเทศที่ lerped กับแนวของน้ำ ปัญหาของฉันคือตอนนี้ฉันไม่สามารถระบุได้ว่าอะไรคือตรรกะที่อยู่เบื้องหลัง การคาดการณ์ตำแหน่งอวกาศของโลกที่แท้จริงของจุดของรูปคลื่น / น้ำแล้วคูณด้วย -.5f …

2
สุ่มหมายเลข hlsl
คุณจะสร้างหมายเลขสุ่มใน HLSL ได้อย่างไร ฉันขอเพราะผมต้องการที่จะลองGPU ray การติดตาม คุณต้องสร้างเส้นทางแบบสุ่มในตัวแบ่งพิกเซล ดังนั้นฉันต้องการrandFloat()ที่ผลคือตัวเลขสุ่มระหว่าง -1 และ +1 นอกจากนี้การจัดการกับคำแนะนำเสียง hlsl คืออะไร? เอกสารบอกว่ามันถูกลบออกจาก HLSL 2.0 ขึ้นไป ทำไม ? ฉันอ่านเกี่ยวกับวิธีการที่คุณเติมพื้นผิวด้วยค่าแบบสุ่มแล้วให้มีการประสานงานพื้นผิวในแต่ละจุดยอดที่มีดัชนีลงในพื้นผิวนั้น แต่นั่นคือจุดสุดยอดต่อฉันต้องการคำแนะนำที่ฉันสามารถโทรหาในส่วนพิกเซลได้ ยิ่งไปกว่านั้นวิธีนี้ต้องใช้ "reseeding" เท็กซัสต่อยอดถ้าคุณต้องการค่าที่แตกต่างกันในแต่ละเฟรมและนั่นต้องใช้การปรับปรุงบัฟเฟอร์เท็กซ์ในแต่ละเฟรม (ซึ่งอาจมีราคาแพง!) ด้วยรายละเอียดคุณจะสร้างตัวเลขสุ่มบน GPU ได้อย่างไร?
13 hlsl  random  gpu 

2
DirectX11 ฉันจะจัดการและอัปเดตบัฟเฟอร์คงที่หลายส่วนได้อย่างไร
เอาล่ะฉันมีเวลายากที่จะเข้าใจว่าบัฟเฟอร์คงที่จะถูกผูกไว้กับขั้นตอนท่อและปรับปรุง ฉันเข้าใจว่า DirectX11 สามารถมีบัฟเฟอร์คงที่ได้ถึง 15 shader ต่อสเตจและแต่ละบัฟเฟอร์สามารถเก็บค่าคงที่ได้มากถึง 4096 ค่า อย่างไรก็ตามฉันไม่เข้าใจว่า ID3D11Buffer COM ที่ใช้ในการโต้ตอบกับบัฟเฟอร์คงที่เป็นเพียงกลไก (หรือที่จับ) ที่ใช้สำหรับเติมช่องบัฟเฟอร์เหล่านี้หรือถ้าวัตถุอ้างอิงตัวอย่างของข้อมูลบัฟเฟอร์ที่ถูกผลักไปมา ระหว่าง GPU และ CPU ฉันคิดว่าความสับสนของฉันในหัวข้อเป็นสาเหตุของปัญหาที่ฉันใช้บัฟเฟอร์คงที่สองแบบ นี่คือตัวอย่างโค้ด shader cbuffer PerFrame : register(b0) { float4x4 view; }; cbuffer PerObject : register(b1) { float4x4 scale; float4x4 rotation; float4x4 translation; }; วิธีการจัดระเบียบรหัสของฉันกล้องจะจัดการอัปเดตข้อมูลที่เกี่ยวข้องต่อเฟรมและ GameObjects จะอัปเดตข้อมูลต่อวัตถุของตัวเอง ทั้งสองคลาสมี ID3D11Buffer ของตัวเองที่ใช้ในการทำสิ่งนี้ (ใช้สถาปัตยกรรมฮับดังนั้นคลาส GameObject …

3
HLSL โปร่งแสงพลาสติก Shader
ฉันพยายามที่จะสร้าง shader เพื่อทำซ้ำวัตถุพลาสติกสีขาวที่มีแสงสีอยู่ภายใน ไม่ว่าจะด้วย shader ที่จะโปร่งแสงและถ้าฉันใส่แสงเข้าไปในวัตถุแสงจะแสดงผ่านหรือโดยการมี shader ที่ทำให้เอฟเฟกต์ของแสงที่อยู่ภายใน เอฟเฟกต์ที่กำลังจะเป็นเหมือนแสงที่ส่องผ่านโคมไฟคล้ายกับภาพเหล่านี้: เป็นการดีที่ฉันจะสามารถควบคุมความแข็งแรงและสีของแสงเพื่อให้ชีพจรและหมุนผ่านสี fluro สดใสดีบางอย่าง แม้ว่าฉันจะไม่แน่ใจว่าจะเริ่ม! คำถามของฉันคือใครรู้เทคนิคที่ฉันควรวิจัยเพื่อให้สามารถผลิต shader ดังกล่าวหรือมีตัวอย่างของ shader เดียวกัน / คล้ายกันที่ฉันสามารถใช้เป็นจุดเริ่มต้น? หรือแม้ว่าคุณต้องการให้ shader ที่อาจทำงานได้
12 graphics  shaders  hlsl 

1
อนุพันธ์ของอวกาศสกรีนคืออะไรและเมื่อใดที่ฉันจะใช้
ฉันเห็นฟังก์ชั่นddxและddyglsl และการเทียบเท่า hlsl เกิดขึ้นในรหัส shader ทุก ๆ ครั้งแล้ว ขณะนี้ฉันกำลังใช้พวกมันเพื่อทำแผนที่ bump โดยไม่มีการแทนเจนต์หรือ bitangent แต่โดยทั่วไปฉันคัดลอกวางโค้ด ฉันไม่เข้าใจว่าฟังก์ชั่นเหล่านี้คืออะไรพวกเขาทำอะไรและเมื่อใดที่ฉันจะใช้มัน ดังนั้นคำถาม: ฟังก์ชันอนุพันธ์หน้าจอคืออะไร? ฟังก์ชั่นเหล่านี้ทำอะไร? ค่าอินพุตและค่าเอาต์พุต ลักษณะพิเศษใดที่ใช้บ่อยที่สุด เอฟเฟกต์ประเภทใดที่คุณต้องมองไปที่ฟังก์ชันเหล่านี้

1
Tessellation vs Geometry Shader
แก้ไขให้ถูกต้องหากฉันผิด แต่ทั้ง Geometry Shader และงาน Tessellation Shader นั้นเป็นการสร้างจุดยอดในกราฟิคท่อ สิ่งที่ฉันอยากรู้คือพวกเขาแตกต่างกันอย่างไรและเมื่อใดที่ฉันควรใช้อันอื่น

4
HLSL shader จริง ๆ แล้วมีผลกระทบต่อการแสดงผลอย่างไร
ฉันเข้าใจไวยากรณ์ของ HLSL เช่นสมมติว่าฉันมีสิ่งนี้เป็น HLSL ของฉัน: struct VOut { float4 position : SV_POSITION; float4 color : COLOR; }; VOut VShader(float4 position : POSITION, float4 color : COLOR) { VOut output; output.position = position; output.position.xy *= 0.7f; // "shrink" the vertex on the x and y axes output.color = color; return output; …
11 directx  hlsl 

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

2
ฉันจะสร้างประกายแวววาวได้อย่างไร?
ฉันพยายามสร้างเอฟเฟกต์ระยิบระยับสำหรับ shader เรียลไทม์ของฉัน แต่ฉันไม่รู้ว่าจะทำอย่างไร นี่คือตัวอย่างหนึ่งและอีกตัวอย่างหนึ่ง ฉันสามารถใช้เทคนิคใดในการทำสิ่งนี้

1
2D โปรไฟล์ผิวด้านบนของน้ำ
ฉันพยายามสร้างเอฟเฟกต์ของความหนาของผิวน้ำด้วย shader ที่ยอด ฉันอยู่ในสภาพแวดล้อมของเกม 3 มิติ แต่มันเป็นมุมมองเลื่อนดังนั้นมุมมอง "2D" นี่คือบทแนะนำที่ดีเกี่ยวกับการสร้างเอฟเฟกต์ดังกล่าวใน 2D จริงโดยใช้ตัวแบ่งส่วน แต่ฉันคิดว่ามันใช้ไม่ได้ในกรณีนี้ สำหรับช่วงเวลาที่ฉันมีเครื่องบินเพียงลำเดียวฉันก็ใช้การหักเหแสง และฉันต้องการใช้เอฟเฟกต์ความหนาของน้ำ แต่ฉันไม่รู้จะทำยังไง ฉันไม่ได้พยายามที่จะสร้างการเสียรูป / การเคลื่อนที่ของน้ำโดยใช้จุดยอดในขณะนี้นี่ไม่ใช่ประเด็น ฉันไม่รู้ว่ามันเป็นไปได้หรือเปล่ากับ quad ที่เรียบง่ายบางทีฉันควรใช้วัตถุแบบนี้ นี่คือตัวอย่างบางส่วน. ฉันไม่มีความคิดเกี่ยวกับวิธีสร้างเอฟเฟกต์นี้ ขอบคุณมาก ! [ แก้ไข ] เพิ่มเอฟเฟกต์น้ำเรย์แมนเพื่อการอ้างอิงที่ดีขึ้นของเอฟเฟกต์

3
เหตุใดฉันจึงไม่ได้รับบูลบรรจุและปรับให้เป็นบัฟเฟอร์คงที่ D3D
เอาล่ะฉันมีเวลายากที่จะได้รับการบรรจุและจัดแนวเป็นบัฟเฟอร์คงที่ hlsl และฉันไม่แน่ใจว่าทำไม นี่คือบัฟเฟอร์ใน hlsl cbuffer MaterialBuffer : register(b1) { float3 materialDiffuseAlbedo; float materialSpecularExponent; float3 materialSpecularAlbedo; bool isTextured; }; และนี่คือ c ++ struct GeometryBufferPass_MaterialBuffer { XMFLOAT3 diffuse; float specularExponent; XMFLOAT3 specular; bool isTextured; }; ฉันพยายามย้ายบูลและขยายโครงสร้างในทุก ๆ ด้านโดยไม่มีโชค วิธีที่ถูกต้องในการทำเช่นนี้คืออะไร?

1
คลื่นระลอกคลื่น
ฉันทำงานเกมป้องกันหอคอยมาระยะหนึ่งแล้วและตอนนี้ฉันก็พอใจกับผลลัพธ์มาก อย่างไรก็ตามมีสิ่งหนึ่งที่ฉันต้องการเพิ่ม ฉันเคยเห็นวิดีโอของ GeoDefense สำหรับ Windows Phone 7 แล้วที่นี่: http://www.youtube.com/watch?v=YhPr4A4LRPQ โปรดสังเกตว่า (เมื่อยูนิตถูกฆ่าหรือกระสุนปืนชนกับยูนิต) พื้นหลังจะเป็นระลอกคลื่นในเอฟเฟกต์ของคลื่นบางประเภท ฉันจะทำให้เทียบเท่าได้อย่างไร ฉันคิดว่าฉันต้องทำมันในจุดสุดยอดด้วยรูปสี่เหลี่ยมที่ทำจากจุดยอดต่างๆ คุณโทรอะไร แก้ไขเป็นสิ่งสำคัญที่จะต้องทราบว่าเกม XNA ของฉันไม่ได้สร้างขึ้นสำหรับ Windows phone แต่สำหรับพีซี Windows
9 xna  c#  hlsl 

3
การสุ่มตัวอย่างพื้นผิว Direct3D ช้ามาก
ดังนั้นฉันจึงเขียนเกมเล็ก ๆ โดยใช้ Direct3D 9 และฉันใช้การทำงานหลายอย่างเพื่อภูมิประเทศ สิ่งที่ฉันทำคือการสุ่มตัวอย่าง 3 พื้นผิวและแผนที่ผสมและรับสีโดยรวมจากพื้นผิวทั้งสามตามช่องสีจากแผนที่ผสมผสาน อย่างไรก็ตามฉันได้รับอัตราเฟรมลดลงมากเมื่อฉันลองมากกว่า 1 พื้นผิวฉันจะเปลี่ยนจาก 120+ fps เป็นต่ำกว่า 50 นี่คือรหัส HLSL ที่รับผิดชอบในการชะลอตัว: float3 ground = tex2D(GroundTex, multiTex).rgb; float3 stone = tex2D(StoneTex, multiTex).rgb; float3 grass = tex2D(GrassTex, multiTex).rgb; float3 blend = tex2D(BlendMapTex, blendMap).rgb; ฉันทำผิดหรือเปล่า? หากใครมีข้อมูลหรือเคล็ดลับเกี่ยวกับการสุ่มตัวอย่างพื้นผิวหรืออะไรก็จะดี ขอบคุณ
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.