Slide 1

Slide 1 text

No content

Slide 2

Slide 2 text

໼໺य़थ גࣜձࣾαΠόʔΤʔδΣϯτ ήʔϜɾΤϯλʔςΠϝϯτࣄۀຊ෦ ίΞٕज़ຊ෦ ΫϥΠΞϯταΠυΤϯδχΞ

Slide 3

Slide 3 text

ࣗݾ঺հ w αΠόʔΤʔδΣϯτʹاը৬Ͱ৽ଔೖࣾ w ΤϯδχΞʹస޲ w %$(पΓͷۀ຿Λ࢝ΊΔ w ୀࣾ͠%F/"΁ w αΠόʔΤʔδΣϯτʹ࠶ೖࣾ !IBSVNBL@ )BSVNB, -*()5ʢٕज़ϒϩάʣ

Slide 4

Slide 4 text

ίΞςΫʹ͍ͭͯ w ήʔϜɾΤϯλʔςΠϝϯτࣄۀ෦ʢ4(&ʣͷٕज़ԣஅ૊ ৫ w ϛογϣϯ͸։ൃޮ཰ͱ඼࣭ͷ࠷దԽ w ڞ௨ج൫։ൃɾύϑΥʔϚϯενϡʔχϯάɾνʔτରࡦ ͳͲ

Slide 5

Slide 5 text

/07"γΣʔμͷ঺հ

Slide 6

Slide 6 text

/07"γΣʔμ w 6OJUZͷ1BSUJDMF4ZTUFN༻ͷγΣʔμ w ΤϑΣΫτ੍࡞ͰΑ͘࢖͏ػೳΛ·ͱΊͨ΋ͷ w ΫΦϦςΟͱ։ൃޮ཰޲্ͷͨΊʹ࡞੒ w લ਎ͱͳΔγΣʔμͷػೳΛ੔ཧ631ʹରԠͨ͠΋ͷ IUUQTHJUIVCDPN$ZCFS"HFOU(BNF&OUFSUBJONFOU/PWB4IBEFS

Slide 7

Slide 7 text

No content

Slide 8

Slide 8 text

No content

Slide 9

Slide 9 text

044Խʹ͍ͭͯ w ඼࣭޲্ɺۀքߩݙɺಋೖ࣮੷ͳͲΛ໨తͱͯ͠044Ͱެ ։ʢ.*5ϥΠηϯεʣ w (JU)VCʹެ։͍ͯ͠·͢ w ΞηοτετΞʹ΋௥ʑެ։༧ఆ IUUQTHJUIVCDPN$ZCFS"HFOU(BNF&OUFSUBJONFOU/PWB4IBEFS

Slide 10

Slide 10 text

$VTUPN7FSUFY4USFBNT ͱͷ࿈ܞ

Slide 11

Slide 11 text

ϓϩύςΟΞχϝʔγϣϯ w ΤϑΣΫτͰ͸γΣʔμͷ֤ϓϩύςΟΛΞχϝʔγϣϯ ͤ͞Δඞཁ͕͋Δ w ΞʔςΟετ͕೚ҙͷϓϩύςΟΛ޷͖ͳΑ͏ʹΞχϝʔ γϣϯͤ͞ΒΕΔͷ͕ཧ૝త

Slide 12

Slide 12 text

$VTUPN7FSUFY4USFBNT w 1BSUJDMF4ZTUFNͰ࡞੒ͨ͠஋Λ௖఺σʔλͱͯ͠ૹΔػೳ w $VTUPN%BUBͳͲͱ࿈ܞ͢Ε͹ύʔςΟΫϧͷੜଘ࣌ؒʹ Ԡͨ͡ΞχϝʔγϣϯΧʔϒͷ஋Λ౉ͤΔ

Slide 13

Slide 13 text

$VTUPN%BUBҎ֎ͱͷ࿈ܞ w $VTUPN%BUBҎ֎ͷϞδϡʔϧͱ΋࿈ܞՄೳ w ύʔςΟΫϧ͝ͱʹϥϯμϜͳ஋Λ༩͑Δ w ϊΠζʹΑΓ࡞੒ͨ͠஋Λ౉͢ w ύʔςΟΫϧͷ଎౓Λ஋ͱͯ͠౉͢ɺͳͲ

Slide 14

Slide 14 text

$VTUPN%BUBҎ֎ͱͷ࿈ܞ w $VTUPN%BUBҎ֎ͷϞδϡʔϧͱ΋࿈ܞՄೳ w ύʔςΟΫϧ͝ͱʹϥϯμϜͳ஋Λ༩͑Δ w ϊΠζʹΑΓ࡞੒ͨ͠஋Λ౉͢ w ύʔςΟΫϧͷ଎౓Λ஋ͱͯ͠౉͢ɺͳͲ

Slide 15

Slide 15 text

γΣʔμͰ஋Λड͚औΔ w ஋Λड͚औΓํ͸ɺجຊతʹ͸γΣʔμͰ௖఺σʔλʹΞ Ϋηε͢Δ͚ͩ // ௖఺γΣʔμ΁ͷೖྗߏ଄ମ struct Attributes { float4 positionOS : POSITION; // Custom Vertex Streamsͷ஋͕౉ͬͯ͘Δ float4 texcoord1 : TEXCOORD1; float4 texcoord2 : TEXCOORD2; }; // ௖఺γΣʔμ Varyings vert(Attributes IN) { Varyings OUT; OUT.positionHCS = TransformObjectToHClip(IN.positionOS.xyz); // CustomVertexStreamsͷ஋Λड͚औͬͯࣗ༝ʹ࢖͑Δ float3 color1 = IN.texcoord1.xyz; float3 color2 = IN.texcoord2.xyz; return OUT; }

Slide 16

Slide 16 text

൚༻తʹ࢖͑ΔΑ͏ʹ w ΞʔςΟετ͕೚ҙͷϓϩύςΟʹ೚ҙͷ$VTUPN7FSUFY 4USFBNTΛׂΓ౰͍ͯͨ w ϚςϦΞϧͷ*OTQFDUPS͔Βड͚औΔ5&9$003%ͷΠϯσο Ϋεͱ4XJ[[MFΛࢦఆͰ͖ΔΑ͏ʹ͢Δ

Slide 17

Slide 17 text

൚༻తͳ࣮૷ w ϓϩύςΟͷ஋Λ࢖ͬͯରԠ͢Δ஋Λऔಘ w ࣮ࡍʹ͸(16Πϯελϯγϯάͷؔ܎Ͱ΋͏গ͠ෳࡶ // Ξχϝʔγϣϯ༻ͷϓϩύςΟ float _Foo; // ௖఺γΣʔμ Varyings vert(Attributes IN) { Varyings OUT; OUT.positionHCS = TransformObjectToHClip(IN.positionOS.xyz); // ௖఺৘ใΛ٧Ίͨ഑ྻΛ࡞੒ float4 customCoords[] = { float4(0.0, 0.0, 0.0, 0.0), IN.texcoord1, IN.texcoord2 }; // ϓϩύςΟΛσίʔυͯ͠഑ྻ͔Βదͨ͠஋Λऔಘ float fooIntensity = customCoords[_Foo % 10][_Foo / 10]; OUT.intensity = fooIntensity; return OUT; }

Slide 18

Slide 18 text

ςΫενϟ഑ྻ %ςΫενϟ

Slide 19

Slide 19 text

ςΫενϟ഑ྻͱ͸ʁ w ෳ਺ͷςΫενϟ͕ͭͷΞηοτʹͳͬͨʢΑ͏ͳʣ΋ͷ w 67࠲ඪʹՃ͑ͯ഑ྻΠϯσοΫεΛࢦఆͯ͠αϯϓϦϯά w $VTUPN7FSUFY4USFBNTͱซ༻͢Δ͜ͱͰϑϦοϓϒοΫ ʢύϥύϥΞχϝʣΛ࣮ݱͰ͖Δ

Slide 20

Slide 20 text

%ςΫενϟͱ͸ʁ w 67஋Ͱ͸ͳ࣍͘ݩ࠲ඪΛ࢖ͬͯαϯϓϦϯά͢Δ w $VTUPN7FSUFY4USFBNTͱซ༻͢Δ͜ͱͰϑϦοϓϒοΫϒ ϨϯσΟϯάʢ׈Β͔ͳύϥύϥΞχϝʣΛ࣮ݱͰ͖Δ

Slide 21

Slide 21 text

࡞੒ํ๏ w ࠷ۙͷ6OJUZʢҎ߱ʣͰ͸Πϯϙʔτઃఆ͔Β࡞ΕΔ w ςΫενϟγʔτ͔Βߦͱྻͷ਺Λࢦఆͯ͠࡞੒͢Δ w Ҏલ͸εΫϦϓτ͔Β࡞Δ͔͠ͳ͔ͬͨ

Slide 22

Slide 22 text

ςΫενϟ഑ྻͷαϯϓϦϯά w ʙͷ஋ͰϑϦοϓϒοΫͷਐḿΛ੍ޚ͢ΔͨΊʹҎԼͷ Α͏ʹγΣʔμͰॲཧ͢Δ w @4MJDF$PVOU͸ઃఆ͞ΕͨςΫενϟͷ৘ใ͔Β6OJUZΤσ Ολ্Ͱࣄલʹऔಘࣗ͠ಈతʹઃఆ͓ͯ͘͠ // 0ʙ1Ͱදͨ͠ਐḿ // 1͸࠷ޙͷςΫενϟΛ͍ࣔͨ͠ͷͰ0.999·ͰʹؙΊ͓ͯ͘ float progress = _Progress; progress = clamp(progress, 0, 0.999); // Texture2DArrayͷΠϯσοΫεΛࣔ͢஋ʹՃ޻͢Δ progress = frac(progress); progress *= _SliceCount; progress -= 0.5; // αϯϓϦϯά return SAMPLE_TEXTURE2D_ARRAY(_Texture2DArray, ɹɹɹɹsampler_Texture2DArray, uv, progress);

Slide 23

Slide 23 text

%ςΫενϟͷαϯϓϦϯά w ʙͷ஋ͰϑϦοϓϒοΫϒϨϯσΟϯάͷਐḿΛ੍ޚ͢ ΔͨΊʹҎԼͷΑ͏ʹγΣʔμͰॲཧ͢Δ w @4MJDF$PVOU͸ઃఆ͞ΕͨςΫενϟͷ৘ใ͔Β6OJUZΤσ Ολ্Ͱࣄલʹऔಘࣗ͠ಈతʹઃఆ͓ͯ͘͠ // 0ʙ1Ͱදͨ͠ਐḿ float progress = _Progress; // Texture3Dͷz஋Λࣔ͢஋ʹՃ޻͢Δ float progressOffset = 1.0 / _SliceCount * 0.5; progress = clamp(progress, 0, 1.0); progress = lerp(progressOffset, 1.0 - progressOffset, progress); // αϯϓϦϯά return SAMPLE_TEXTURE3D_LOD(_Texture3D, sampler_Texture3D, float3(IN.uv, progress), 0);

Slide 24

Slide 24 text

࢖༻Օॴ w ϕʔεςΫενϟ͚ͩͰͳ͋͘ΒΏΔػೳͰ࢖༻Ͱ͖Δ w ৐ࢉ৭༻ͷςΫενϟɺΞϧϑΝτϥϯδγϣϯɺΤϛογ ϣϯͳͲ

Slide 25

Slide 25 text

ϙετϓϩηε σΟετʔγϣϯ

Slide 26

Slide 26 text

σΟετʔγϣϯͱ͸ʁ w ۭؒΛ࿪·ͤΔදݱ w ೤೾΍۶ંදݱʹ࢖͏ w લ਎ͷγΣʔμ͔Βେ͖࣮͘૷Λมߋͨ͠෦෼

Slide 27

Slide 27 text

લ਎ͷσΟετʔγϣϯ w (SBC1BTTʹΑΓϑϨʔϜόοϑΝΛऔಘ w σΟετʔγϣϯ༻ΦϒδΣΫτͷඳը࣌ʹˢΛ࿪Ίͭͭ αϯϓϦϯά͢Δ

Slide 28

Slide 28 text

ॏͶ͕͚Ͱ͖ͳ͍ w ճσΟετʔγϣϯΛ͔͚Δࡍʹಉ͡ςΫενϟΛࢀর͢ ΔͨΊɺޙʹඳըͨ͠΋ͷͷӨڹ͔͠൓ө͞Εͳ͍ w 631ͷύʔςΟΫϧγΣʔμ΋ຊ࣭తʹ͸ಉ͡໰୊

Slide 29

Slide 29 text

ϙετϓϩηεσΟετʔγϣϯ w σΟετʔγϣϯ༻ΦϒδΣΫτͷඳը࣌ʹεΫϦʔϯε ϖʔεͷ67Φϑηοτ৘ใΛඳըͨ͠ςΫενϟΛ࡞੒ w ϙετϓϩηεͰ͜ͷσΟετʔγϣϯϚοϓΛ࢖͏

Slide 30

Slide 30 text

σΟετʔγϣϯϚοϓ࡞੒ύε w 631Ͱ͸(SBC1BTT͕࢖༻Ͱ͖ͳ͍ w ൒ಁ໌ඳըޙʹσΟετʔγϣϯ༻ΦϒδΣΫτΛඳը͢ ΔͨΊͷύεΛࠩ͠ࠐΜͩ w ͜ͷύεͰσΟετʔγϣϯϚοϓ͕࡞ΒΕΔ

Slide 31

Slide 31 text

γΣʔμ w σΟετʔγϣϯΦϒδΣΫτʹઃఆ͞Ε͍ͯΔςΫενϟ Λݩʹɺͷ஋ͰॳظԽͨ͠σΟετʔγϣϯϚοϓʹ67 Φϑηοτ஋ΛՃࢉ͍ͯ͘͠ w ࣮ࡍʹ͸΋ͬͱଟػೳͳͷͰ͍ΖΜͳॲཧΛ͍ͯ͠Δ half4 frag(Varyings input) : SV_Target { // σΟετʔγϣϯ༻ͷςΫενϟͷR஋ͱG஋Λ࢖͏ half2 distortion = SAMPLE_TEXTURE2D(_BaseMap, sampler_BaseMap, input.uv).xy; // ͦΕͧΕͷ஋͕0.5͔Βԕ͍΄Ͳ࿪Έ͕ڧ͘ͳΔ distortion = distortion * 2.0 - 1.0; // ڧ౓Λ൓ө distortion *= 0.1 * _DistortionIntensity; // σΟετʔγϣϯϚοϓͷR஋ͱG஋ʹॻ͖ࠐΉ return half4(distortion, 0, 1); }

Slide 32

Slide 32 text

ϙετΤϑΣΫτύε w 631Ͱ͸ʢ·ͩʣΧελϜϙετΤϑΣΫτ͕ެ࣮ࣜ૷͞ Ε͍ͯͳ͍ w ϙετΤϑΣΫτΛద༻͢ΔͨΊͷύεΛ࡞੒ w ϨϯμϦϯά݁ՌΛσΟετʔγϣϯϚοϓͰ࿪ΊΔ

Slide 33

Slide 33 text

γΣʔμ w σΟετʔγϣϯϚοϓʹॻ͖ࠐ·Εͨ஋Λऔಘ w 67ͷΦϑηοτ஋Λ͔͚ͭͭ͜͜·ͰͷϨϯμϦϯά݁Ռ Λද͢ςΫενϟΛαϯϓϦϯά͢Δ half4 frag(Varyings IN) : SV_Target { // σΟετʔγϣϯςΫενϟ͔Β஋Λऔಘ half2 dist = SAMPLE_TEXTURE2D(_DistTex, sampler_DistTex, IN.uv).xy; // σίʔυ dist = dist.xy * 2.0 - 1.0; // UV஋ͷΦϑηοτͱͯ͜͜͠·ͰͷϨϯμϦϯά݁ՌͷςΫενϟΛαϯϓϦϯά half4 col = SAMPLE_TEXTURE2D(_MainTex, sampler_MainTex, IN.uv + dist); return col; }

Slide 34

Slide 34 text

ॏͶ͕͚Մೳ w ॏͶ͕͚͢Δࡍʹ͸67Φϑηοτ৘ใ͸Ճࢉ͞Ε͍ͯ͘ w ෳ਺ͷσΟετʔγϣϯΛॏͶͯ΋ޮՌΛಘΒΕΔ

Slide 35

Slide 35 text

࣮૷্ͷݶք w खલʹ͋ΔΦϒδΣΫτͷ৭͕൓ө͞Εͯ͠·͏ w ࠓճͷ࣮૷͔ͩΒى͜Δ͜ͱͰ͸ͳ͘ɺલ਎ͷγΣʔμ΍ 631ͷγΣʔμͰ΋ಉ͡ݱ৅͕ൃੜ

Slide 36

Slide 36 text

ΠϯϥΠϯ αϯϓϥʔεςʔτ

Slide 37

Slide 37 text

αϯϓϥʔεςʔτͱ͸ʁ w ςΫενϟͷαϯϓϦϯάํ๏Λࢦఆ͢Δ΋ͷ w ςΫενϟͷΠϯϙʔτઃఆͷ8SBQ.PEF΍'JMUFS.PEFͳ Ͳ͕ͦΕʹ౰ͨΔ

Slide 38

Slide 38 text

ΠϯϥΠϯαϯϓϥʔεςʔτ w γΣʔμͰαϯϓϥʔεςʔτΛϋʔυίʔσΟϯά͢Δ ػೳ w ςΫενϟͷΠϯϙʔτઃఆΛγΣʔμଆͰΦʔόʔϥΠ υͰ͖Δ // ςΫενϟ TEXTURE2D(_BaseMap); // ΠϯϥΠϯαϯϓϥʔεςʔτ // ͜͜Ͱ͸Wrap ModeΛPointʹɺFilter ModeΛMirrorʹ͍ͯ͠Δ SamplerState sampler_point_mirror; half4 frag(Varyings IN) : SV_Target { // ΠϯϥΠϯαϯϓϥʔεςʔτΛ࢖ͬͯαϯϓϦϯά return _BaseMap.Sample(sampler_point_mirror, IN.uv); }

Slide 39

Slide 39 text

ϛϥʔαϯϓϦϯά w ϚςϦΞϧʹνΣοΫΛೖΕΔ͚ͩͰϛϥʔαϯϓϦϯά Ͱ͖Δػೳͷ಺෦࣮૷ʹ࢖༻

Slide 40

Slide 40 text

(16Πϯελϯγϯά

Slide 41

Slide 41 text

(16Πϯελϯγϯάͱ͸ʁ w ෳ਺ͷಉ͡ϝογϡΛ࣋ͭΦϒδΣΫτΛճͷυϩʔίʔ ϧʹ·ͱΊͯඳը͢Δ͜ͱͰॲཧෛՙΛԼ͛Δػೳ w 1BSUJDMF4ZTUFNͰ͸3FOEFS.PEFΛ.FTIʹઃఆ͍ͯ͠Δ ৔߹ͷΈ࢖༻Մೳ

Slide 42

Slide 42 text

Πϯελϯε͝ͱͷσʔλ w (16Πϯελϯγϯά͸ڞ௨͢ΔύϥϝʔλΛ࢖͍ճͯ͠ ඳըॲཧΛߴ଎Խ͢Δख๏ w Πϯελϯε͝ͱʹҟͳΔσʔλ͸ઐ༻ͷߏ଄ମʹఆٛͯ͠ औΓग़͢ඞཁ͕͋Δ // Πϯελϯε͝ͱͷσʔλΛఆٛͨ͠ߏ଄ମ #define UNITY_PARTICLE_INSTANCE_DATA MyInstanceData struct MyInstanceData { float3x4 transform; float3 foo; }; // தུ // ௖఺ɾϑϥάϝϯτγΣʔμͰΠϯελϯε͝ͱͷσʔλΛऔಘ͢Δ UNITY_PARTICLE_INSTANCE_DATA data = unity_ParticleInstanceData[unity_InstanceID]; output.foo = data.foo;

Slide 43

Slide 43 text

$VTUPN7FSUFY4USFBNT w $VTUPN7FSUFY4USFBNTͰ࢖͏5&9$003%͸Πϯελϯε ݻ༗ͷσʔλͱ͢Δඞཁ͕͋Δ w ϝογϡ(16Πϯελϯγϯά͕༗ޮͳ࣌ʹ͸ͪ͜ΒΛ࢖ ͏Α͏ʹ࣮૷͢Δ #ifdef NOVA_PARTICLE_INSTANCING_ENABLED struct DefaultParticleInstanceData { float3x4 transform; uint color; float4 customCoord1; // TEXCOORD1 float4 customCoord2; // TEXCOORD2 }; #endif

Slide 44

Slide 44 text

431#BUDIFS w 431Ͱ࢖͑ΔόονϯάγεςϜ w ηοτύείʔϧ͕ݮΔ w ݱ࣌఺Ͱ͸1BSUJDMF4ZTUFNʹ͸ඇରԠ w কདྷతͳରԠΛݟਾ࣮͑ͨ૷Λ͓ͯ͘͠ w $#V⒎FS༻ʹϓϩύςΟΛ·ͱΊ͓ͯ͘

Slide 45

Slide 45 text

͋Γ͕ͱ͏͍͟͝·ͨ͠